• Stars
    star
    128
  • Rank 279,602 (Top 6 %)
  • Language
    JavaScript
  • License
    GNU Affero Genera...
  • Created almost 3 years ago
  • Updated about 1 year ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

Grade: 89%. COMP3006 coursework. An encrypted file sharing application that leverages web sockets to allow users to send and receive files.

FileDrop

Banner

Downloads

Based on GitHub Release downloads and DockerHub pulls.

Disclaimer

This was made as the coursework for my COMP3006 university module. The requirements were to develop a responsive and interactive web application that uses web sockets, Node.js, and PouchDB or MongoDB as its server-side database. This project got 89/100.

What is FileDrop?

FileDrop is an application that allows for encrypted file sharing between two users through the use of web sockets.

How does it work?

You download the application for the operating system you use from the Releases section, and run the app. Once you can see the IP and port of the server, it means it's working. You can then use any device on the same network to navigate to that IP and port. From there, you can choose a username and log in. Devices that are logged in would be able to see each other. At this point, you can ask for another client's permission to send them a file, or manually whitelist a client so they can send you a file whenever they wish.

How can I host the server without using the Electron app?

Electron apps are big, no arguments there. You can simply download the source code (or ManualServer.zip from the Releases section), open a terminal in the same directory as the package.json file, run npm install followed by npm start. Alternatively, you can use the Docker image (further instructions can be found in the README on DockerHub).

How does the encryption work?

First and foremost, all encryption is done on the client-side so that the server doesn't need to be trusted. This also increases performance as encryption is a resource-intensive task, and by distributing the workload between clients, the server can transfer files as fast as possible. When the page first loads, an RSA public/private key pair is generated and stored in the browser's local storage. The public key is then broadcasted to other clients. When the user chooses a file and clicks on the upload button, the file is split into chunks of 256KB. A 256-bit AES key is then generated, and the public RSA key of the client the user is sending the file to is used to encrypt the AES key. The AES key is then used to symmetrically encrypt each chunk before sending it to the server. The encrypted AES key is sent with the encrypted chunk data as well. The other client then uses their private key to decrypt the AES key, which they can use to decrypt the chunk data. Once all the chunks have been received, they're put together to form the original file, which is then downloaded to the client's device.

What does the app look like?

Login Page

Login

Application Page

Application

Attributions

Resource URL
Mockup Devices Device Shots
Login Background BG Jar
Main Background SVG Backgrounds
Font Awesome Font Awesome
Jest NPM
CORS NPM
EJS NPM
Express NPM
Jest NPM
Nodemon NPM
PouchDB NPM
Socket.IO NPM
Socket.IO Client NPM
SuperTest NPM
CryptoJS NPM
Forge NPM
Puppeteer NPM
Electron NPM
Electron Builder NPM
Electron Local Shortcut NPM

More Repositories

1

Cryptofolio

Track your cryptocurrency holdings/portfolio with an open-source web, mobile, and desktop application, along with a self-hosted RESTful API.
JavaScript
280
star
2

X-Anonymous

An anonymous Node.js chat web application for end-to-end encrypted communication. All encryption is done on the client-side using RSA-2048/3072/4096, so the server literally knows nothing.
JavaScript
18
star
3

X-Notify

A dependency-free JavaScript notification library.
JavaScript
13
star
4

X-Notes

X:/Notes is a note taking web app developed in HTML, CSS and JavaScript (+jQuery) for the front-end, and PHP for the back-end. Notes can be encrypted with AES-256.
PHP
13
star
5

X-Controller

A safe and simple Node.js remote access tool so you can be lazy.
JavaScript
8
star
6

Lights

A web interface along with a PHP based API to interact with Yeelight smart bulbs.
JavaScript
6
star
7

Income-Tracker

A simple income tracker made with Node.js.
JavaScript
4
star
8

CryptoShare

Grade: 82%. My COMP3000 final year university project that allows you to manage nearly every facet of your finances with an open-source web, mobile, and desktop application, along with a self-hosted GraphQL API.
JavaScript
4
star
9

COMP2003-2020-X

Grade: 86%. COMP2003 Coursework by Team X. An app that allows sufferers of Multiple Sclerosis to record their daily falls, and answer questions posed by researchers.
JavaScript
4
star
10

Zoom-Link-Parser

Just a tiny webpage to easily extract the token, meeting ID, and password from a Zoom invitation link.
CSS
4
star
11

X-Chat

A Node.js and Socket.IO chat web application with RSA-2048 and AES-256-CTR encryption.
JavaScript
4
star
12

X-Passwd

A simple, local, open-source AES-256-CTR encrypted password manager for Android. Built with the Flutter SDK.
Dart
3
star
13

X-LANDrop

An AirDrop-like application running on Node.js (with Electron) that allows for encrypted file sharing between devices on the same network.
JavaScript
3
star
14

Chrome-Crypto-Ticker

A lightweight Chrome extension to keep track of cryptocurrency prices.
JavaScript
3
star
15

X-Music

A music player for Windows, Mac, and Linux running on Node.js (with Electron). It also has a remote control feature.
JavaScript
3
star
16

University-Revision

University revision notes for Computing.
HTML
3
star
17

SOFT152-Assignment

Grade: 87%. SOFT152 Coursework by Khodadad (Adrian) Nouchin. An Airbnb management tool.
C#
3
star
18

xtrendence.github.io

GitHub home page.
CSS
2
star
19

X-Plorer

X:/Plorer is a cross-platform file explorer running on Node.js (and Electron).
JavaScript
2
star
20

Xtrendence

Is this what all the cool guys do?
2
star
21

X-University

A PHP-based website to keep track of everything related to your life while studying a course in university.
CSS
2
star
22

NET112-Practical

Grade: 68%. Practical coursework for the NET112 module by Khodadad (Adrian) Nouchin. Improving a C++ image processing application.
C++
2
star
23

WhistleToTabs

A web-app to convert your whistling to guitar notes.
JavaScript
2
star
24

SOFT166-Practice

Grade: 87.5%. Practice element of the SOFT166 module by Khodadad (Adrian) Nouchin. A Tic-Tac-Toe game using Philips Hue smart bulbs.
HTML
2
star
25

BDobbinsFTW-Archive

A complete archive of BDobbinsFTW's YouTube channel.
JavaScript
2
star
26

2FA-Notifier

A browser extension and mobile app to automatically show 2FA codes for any website as notifications on your phone.
JavaScript
1
star
27

X-OS

A PHP cloud storage solution that simulates an operating system, complete with a file system, drag and drop file management, directory nesting, multiple file uploads etc.
JavaScript
1
star
28

COMP2005-Coursework

Grade: 73%. COMP2005 Coursework by Khodadad (Adrian) Nouchin. An application for testing an API that provides information regarding restaurants in NYC.
Java
1
star
29

X-Calendar

A calendar web app that allows the user to navigate a fully working calendar, keep track of events, and set reminders.
CSS
1
star
30

COMP2000-Assessment

Grade: 100%. COMP2000 Coursework by Khodadad (Adrian) Nouchin. An automated checkout system for a supermarket.
Java
1
star
31

Collector

A website that can be used to keep track of a collection of items. It uses the Imgur API to allow users to upload images of their collectibles.
PHP
1
star
32

Tarball-Search

A search tool that can recursively read the content of ".tar.gz" files. Features a Node.js API, and a React Native mobile application along with AES-256-CTR encryption.
JavaScript
1
star
33

Native-Encryption

My first mobile app developed using React Native. A simple app that allows the user to use AES-256 to encrypt/decrypt data.
JavaScript
1
star
34

Binary-Converter

A simple tool for converting between decimal and binary (with support for One's Complement, and Two's Complement).
JavaScript
1
star
35

ISAD157-Coursework

Grade: 75%. ISAD157 Coursework by Khodadad (Adrian) Nouchin. A WinForms application for reading data from a MySQL database.
C#
1
star
36

COMP2001-Coursework

Grade: 98%. COMP2001 Coursework by Khodadad (Adrian) Nouchin. A RESTful authentication API, and a linked data application.
CSS
1
star
37

PiP-Browser

A frameless picture-in-picture application that can display the content of a URL.
JavaScript
1
star