├── .github
└── workflows
│ └── node.js.yml
├── .gitignore
├── Dockerfile
├── LICENSE.md
├── README.md
├── build
├── icon.icns
├── icon.ico
└── icon.png
├── docker-compose.yml
├── docs
├── ActivityDiagram.drawio
├── ActivityDiagram.png
├── ClientClassDiagram.drawio
├── ClientClassDiagram.png
├── SequenceDiagramLogin.drawio
├── SequenceDiagramLogin.png
├── SequenceDiagramSendFile.drawio
├── SequenceDiagramSendFile.png
├── ServerClassDiagram.drawio
├── ServerClassDiagram.png
├── SystemArchitecture.drawio
├── SystemArchitecture.png
├── UserPersona.drawio
└── UserPersona.png
├── index.html
├── jsconfig.json
├── package-lock.json
├── package.json
├── promotional-assets
├── Desktop.png
├── DockerHub.png
├── GitHub.png
├── Laptop-Application.png
├── Laptop-Login.png
├── Linux.png
├── Phone.png
├── Tablet.png
├── Windows.png
└── macOS.png
├── src
├── app.js
├── assets
│ ├── css
│ │ ├── dark.css
│ │ ├── light.css
│ │ ├── resize.css
│ │ └── style.css
│ ├── img
│ │ ├── Banner.png
│ │ ├── Icon.png
│ │ ├── Icon.psd
│ │ └── favicon
│ │ │ ├── android-chrome-192x192.png
│ │ │ ├── android-chrome-512x512.png
│ │ │ ├── apple-touch-icon.png
│ │ │ ├── browserconfig.xml
│ │ │ ├── favicon-16x16.png
│ │ │ ├── favicon-32x32.png
│ │ │ ├── favicon.ico
│ │ │ ├── mstile-150x150.png
│ │ │ ├── safari-pinned-tab.svg
│ │ │ └── site.webmanifest
│ └── js
│ │ ├── ChunkReader.js
│ │ ├── CryptoFD.js
│ │ ├── FileSaver.js
│ │ ├── Uploader.js
│ │ ├── crypto-js.js
│ │ ├── crypto-js.min.js.map
│ │ ├── forge.all.js
│ │ ├── forge.all.min.js.map
│ │ ├── forge.js
│ │ ├── jquery.js
│ │ ├── main.js
│ │ ├── notifier.js
│ │ ├── portableMain.js
│ │ ├── prime.worker.min.js
│ │ ├── socket.io.min.js.map
│ │ ├── socket.js
│ │ └── utils.js
├── modules
│ ├── Colors.js
│ ├── ConnectionManager.js
│ ├── DBAdapter.js
│ ├── DBManager.js
│ ├── PermissionManager.js
│ ├── UploadManager.js
│ ├── Utils.js
│ └── Words.js
├── portableApp.js
├── server.js
└── views
│ ├── index.ejs
│ └── portable.ejs
└── tests
├── client.test.js
├── server.test.js
└── validKeys.js
/.github/workflows/node.js.yml:
--------------------------------------------------------------------------------
1 | # This workflow will do a clean install of node dependencies, cache/restore them, build the source code and run tests across different versions of node
2 | # For more information see: https://help.github.com/actions/language-and-framework-guides/using-nodejs-with-github-actions
3 |
4 | name: Node.js CI
5 |
6 | on:
7 | push:
8 | branches: [ main, testing ]
9 | pull_request:
10 | branches: [ main ]
11 |
12 | jobs:
13 | build:
14 |
15 | runs-on: ubuntu-latest
16 |
17 | strategy:
18 | matrix:
19 | node-version: [12.x, 14.x, 16.x]
20 | # See supported Node.js release schedule at https://nodejs.org/en/about/releases/
21 |
22 | steps:
23 | - uses: actions/checkout@v2
24 | - name: Use Node.js ${{ matrix.node-version }}
25 | uses: actions/setup-node@v2
26 | with:
27 | node-version: ${{ matrix.node-version }}
28 | cache: 'npm'
29 | - run: npm ci
30 | - run: npm run build --if-present
31 | - run: npm run test-server
32 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | node_modules
2 | db
3 | testDB
4 | dist
5 | coverage
6 | *.DS_Store
7 | ManualServer.zip
8 | src/portable
9 |
--------------------------------------------------------------------------------
/Dockerfile:
--------------------------------------------------------------------------------
1 | FROM node:16
2 | WORKDIR /usr/src/app/
3 | COPY package*.json ./
4 | COPY ./src ./src
5 | RUN npm install --production
6 | EXPOSE 3180
7 | CMD ["npm", "start"]
8 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # FileDrop
2 |
3 | 
4 |
5 | 
6 |
7 | *Based on GitHub Release downloads and DockerHub pulls.*
8 |
9 | ### Disclaimer
10 |
11 | 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.
12 |
13 | ### What is FileDrop?
14 |
15 | FileDrop is an application that allows for encrypted file sharing between two users through the use of web sockets.
16 |
17 | ### How does it work?
18 |
19 | You download the application for the operating system you use from the [Releases](https://github.com/Xtrendence/FileDrop/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.
20 |
21 | ### How can I host the server without using the Electron app?
22 |
23 | Electron apps are big, no arguments there. You can simply download the source code (or ManualServer.zip from the [Releases](https://github.com/Xtrendence/FileDrop/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](https://hub.docker.com/r/xtrendence/filedrop) (further instructions can be found in the README on DockerHub).
24 |
25 | ### How does the encryption work?
26 |
27 | 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.
28 |
29 | ### What does the app look like?
30 |
31 | **Login Page**
32 |
33 | 
34 |
35 | **Application Page**
36 |
37 | 
38 |
39 | ### Attributions
40 |
41 | |Resource |URL |
42 | |-----------------------------|------------------------------------------------------------|
43 | |Mockup Devices |[Device Shots](https://deviceshots.com/) |
44 | |Login Background |[BG Jar](https://bgjar.com/) |
45 | |Main Background |[SVG Backgrounds](https://www.svgbackgrounds.com/) |
46 | |Font Awesome |[Font Awesome](https://www.fontawesome.com/) |
47 | |Jest |[NPM](https://www.npmjs.com/package/jest) |
48 | |CORS |[NPM](https://www.npmjs.com/package/cors) |
49 | |EJS |[NPM](https://www.npmjs.com/package/ejs) |
50 | |Express |[NPM](https://www.npmjs.com/package/express) |
51 | |Jest |[NPM](https://www.npmjs.com/package/jest) |
52 | |Nodemon |[NPM](https://www.npmjs.com/package/nodemon) |
53 | |PouchDB |[NPM](https://www.npmjs.com/package/pouchdb) |
54 | |Socket.IO |[NPM](https://www.npmjs.com/package/socket.io) |
55 | |Socket.IO Client|[NPM](https://www.npmjs.com/package/socket.io-client) |
56 | |SuperTest |[NPM](https://www.npmjs.com/package/supertest) |
57 | |CryptoJS |[NPM](https://www.npmjs.com/package/crypto-js) |
58 | |Forge |[NPM](https://www.npmjs.com/package/forge) |
59 | |Puppeteer |[NPM](https://www.npmjs.com/package/puppeteer) |
60 | |Electron |[NPM](https://www.npmjs.com/package/electron) |
61 | |Electron Builder |[NPM](https://www.npmjs.com/package/electron-builder) |
62 | |Electron Local Shortcut |[NPM](https://www.npmjs.com/package/electron-localshortcut) |
63 |
--------------------------------------------------------------------------------
/build/icon.icns:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Xtrendence/FileDrop/101477c21d017d1fdc201006827a4e8ba6b7d2bd/build/icon.icns
--------------------------------------------------------------------------------
/build/icon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Xtrendence/FileDrop/101477c21d017d1fdc201006827a4e8ba6b7d2bd/build/icon.ico
--------------------------------------------------------------------------------
/build/icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Xtrendence/FileDrop/101477c21d017d1fdc201006827a4e8ba6b7d2bd/build/icon.png
--------------------------------------------------------------------------------
/docker-compose.yml:
--------------------------------------------------------------------------------
1 | version: "3"
2 |
3 | services:
4 | filedrop:
5 | build: .
6 | container_name: filedrop
7 | restart: unless-stopped
8 | ports:
9 | - 3180:3180
10 | extra_hosts:
11 | - "host.docker.internal:host-gateway"
12 |
--------------------------------------------------------------------------------
/docs/ActivityDiagram.drawio:
--------------------------------------------------------------------------------
1 | 7Vttc9o4EP41mft0Gb+AgY8pkF5u7mY6Je21nzoCL1gXW3IlOcD9+pNs+VVAnIRiyCQzmVirF1u7z7NaaZUrdxxtPjIUB39TH8Irx/I3V+7kynFs23blHyXZZhLPHWWCFcO+blQKZvg/0EJLSxPsA681FJSGAsd14YISAgtRkyHG6LrebEnD+ltjtAJDMFug0JT+g30RZFLXcgZlxR+AV0H+atvTE4xQ3lpPhQfIp+uKyJ1euWNGqcieos0YQqW9XDFZv9s9tcWXMSCiTYeod/dn0P+RLH7c3M9jazYQ3uR3PcojChM9Y/2xYpurQI4itS0LHwIRhVJmy0c5mVjVc4GYmAkkVP0Sh+GYhpSlHd3paDy+vVWNBaMPUKmx0h9Zo98OTMBm77TsQlkSZkAjEGwrm+gOXj/roQE21NpeV62ViYKKnXIZ0vhYFeOWGpQPWonPUKjTQqG+hJguUiYCuqIEhdNSWlW00g2WeLwJ8YpI2ZwKQSNZAcS/UQBXg8RAMokm0PCg0hlNiA9qElbaS077mypc9/Pi92rdZFMrbXUpm5aaS81wnCZsAU8jzjCwJDZiKxAHuvZ2A4FBiAR+rH/HLsPqrp8olm8uADSqA8geNKCRfZbu1EBH8RUvB4xrAGamOGWgRjJENDhYszChpMlBLUIaOgupcGA7MBVh309xtw6wgFmMUgOupUc30HIEwvatmr77nkFY75SE9V7Az7pOyjZ/URpr4/wLQmw1HVEiaN10sMHiW+X5e8k/WSoZpwo54Uqi1mhasnYPUZ/yvgaFd1DzSVb3WlK4/0oKv8rUPYNqH2kaUCisUa58gg+PeAG/8SvHCxXd5kw+rdTT3Sf1Sb7PgPNrAzMlIuw9PNpL3KpFGivoxJtO0hX0CLRz6rQr3FyFd7azg3hNd3g0awzfiXcE4vVbEm/QJfH6BvHutzJ8lL2Iep38TTgwgiIlk9qS8XyIFw+qoBqIQMklEX8mKlj+8BkRX8ZARVlWzhMZFpGczCsgwFRMqgaAy2TrudE135FVjPilNNo9egCSG++OyEZysA75XXK6iGVb8Pt5EfBJ+D24hIXVNoPYrxkCrBIj787+ZGCw9ziX06BhYIDBdMABjeYJP1Pn22vGSvkZQ8X5Dnf43uEv87398/Gldkv6nKEvtdseNNivPWl4nbXNQ7kb/qADJRkYQXp6sWQqBNKxUSENcbqNWabrcAwswpzjMjDiQHw9kOTPRUZGXu/sIqOhYa/P8DOB1BITIBjOKBS6ZPq2PWSwvS7p65iBcgmHm8UCYtExIF4SDtlnGA61B8SoU39unjtdWEDkeXWf61qmzz1tQOQ9rdKDeSuVK+k0azWsZx16XeetbDNqnxLTTb2ZLIQ3aKQhbNMAJ81DOO77mnCMNWHUck3IPEZna8LIoNs4oJRDJTpvBO3pcxbuU/mHFWH/JUbxPau5ophb7NNG8c77HvsY/MsX4qf51+keO//MKv8OpRy+xCFF/oGUAyZY4CzlkPXNGcwQ4Utgl0jSZhLiDEhqus3cMtYtkhrvdGP1Zs6ZnbYbK2fYJYld86CsQMMskTttUGZ1PBQpNpE5jws1XZKXv2SAuNZugGgPY1278icb66XXuPImdLnk8EuuaDkXv4Fv3v7o9TvOaLg79uvvjvr5PBy25GHHR6LmCfksoGv1KhVAAWNpviICztHqIrMSzf1Mz+s6K+F2ep7wHIbtN1jljrM+RZKSW6wUcegO8kuYtG+heuXlYq+Ji/y28aluF5vJCM08rgIkzt8W7bwdB9PHop0slv+skdmn/J8Xd/o/
--------------------------------------------------------------------------------
/docs/ActivityDiagram.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Xtrendence/FileDrop/101477c21d017d1fdc201006827a4e8ba6b7d2bd/docs/ActivityDiagram.png
--------------------------------------------------------------------------------
/docs/ClientClassDiagram.drawio:
--------------------------------------------------------------------------------
1 | 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
--------------------------------------------------------------------------------
/docs/ClientClassDiagram.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Xtrendence/FileDrop/101477c21d017d1fdc201006827a4e8ba6b7d2bd/docs/ClientClassDiagram.png
--------------------------------------------------------------------------------
/docs/SequenceDiagramLogin.drawio:
--------------------------------------------------------------------------------
1 | 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
--------------------------------------------------------------------------------
/docs/SequenceDiagramLogin.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Xtrendence/FileDrop/101477c21d017d1fdc201006827a4e8ba6b7d2bd/docs/SequenceDiagramLogin.png
--------------------------------------------------------------------------------
/docs/SequenceDiagramSendFile.drawio:
--------------------------------------------------------------------------------
1 | 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
--------------------------------------------------------------------------------
/docs/SequenceDiagramSendFile.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Xtrendence/FileDrop/101477c21d017d1fdc201006827a4e8ba6b7d2bd/docs/SequenceDiagramSendFile.png
--------------------------------------------------------------------------------
/docs/ServerClassDiagram.drawio:
--------------------------------------------------------------------------------
1 | 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
--------------------------------------------------------------------------------
/docs/ServerClassDiagram.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Xtrendence/FileDrop/101477c21d017d1fdc201006827a4e8ba6b7d2bd/docs/ServerClassDiagram.png
--------------------------------------------------------------------------------
/docs/SystemArchitecture.drawio:
--------------------------------------------------------------------------------
1 | 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
--------------------------------------------------------------------------------
/docs/SystemArchitecture.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Xtrendence/FileDrop/101477c21d017d1fdc201006827a4e8ba6b7d2bd/docs/SystemArchitecture.png
--------------------------------------------------------------------------------
/docs/UserPersona.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Xtrendence/FileDrop/101477c21d017d1fdc201006827a4e8ba6b7d2bd/docs/UserPersona.png
--------------------------------------------------------------------------------
/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |