mirror of
https://github.com/schlagmichdoch/PairDrop.git
synced 2025-04-20 15:06:15 -04:00
make rate-limiting and auto-restart optional via flag and modify readme
This commit is contained in:
parent
f12872bf5c
commit
57851902f9
6 changed files with 101 additions and 35 deletions
4
.github/FUNDING.yml
vendored
4
.github/FUNDING.yml
vendored
|
@ -1,6 +1,6 @@
|
||||||
# These are supported funding model platforms
|
# These are supported funding model platforms
|
||||||
|
|
||||||
github: robinlinus
|
github: schlagmichdoch
|
||||||
patreon: # Replace with a single Patreon username
|
patreon: # Replace with a single Patreon username
|
||||||
open_collective: # Replace with a single Open Collective username
|
open_collective: # Replace with a single Open Collective username
|
||||||
ko_fi: # Replace with a single Ko-fi username
|
ko_fi: # Replace with a single Ko-fi username
|
||||||
|
@ -9,4 +9,4 @@ community_bridge: # Replace with a single Community Bridge project-name e.g., cl
|
||||||
liberapay: # Replace with a single Liberapay username
|
liberapay: # Replace with a single Liberapay username
|
||||||
issuehunt: # Replace with a single IssueHunt username
|
issuehunt: # Replace with a single IssueHunt username
|
||||||
otechie: # Replace with a single Otechie username
|
otechie: # Replace with a single Otechie username
|
||||||
custom: https://www.paypal.com/donate/?hosted_button_id=MG8GV7YCYT352
|
custom: https://buymeacoffee.com/pairdrop
|
||||||
|
|
8
CONTRIBUTING.md
Normal file
8
CONTRIBUTING.md
Normal file
|
@ -0,0 +1,8 @@
|
||||||
|
# Contributing guidelines
|
||||||
|
|
||||||
|
Make sure to follow these guidelines before opening an [issue](https://github.com/schlagmichdoch/pairdrop/issues/new/choose) or a [pull request](https://github.com/schlagmichdoch/pairdrop/pulls):
|
||||||
|
|
||||||
|
- An issue is for a bug or a feature request, if you have any question or something similar, please use [Discussions](https://github.com/schlagmichdoch/pairdrop/discussions).
|
||||||
|
- Before opening an issue of a pull request, please check if the issue or the pull request already exists.
|
||||||
|
- Pull requests for packages updates are not allowed since there is [Dependabot](https://github.com/schlagmichdoch/pairdrop/blob/master/.github/dependabot.yml) that checks them automatically.
|
||||||
|
- If you don't know how to contribute, also if you don't know JavaScript or Node.js, you can always help others on [Discussions](https://github.com/schlagmichdoch/pairdrop/discussions), debug the application, share your awesome ideas with a new issue (feature request) and check the whole project for misspellings, too.
|
|
@ -47,3 +47,10 @@ If you want to support me and my work you can [buy me a coffee](https://www.buym
|
||||||
To support the original Snapdrop and its creator go to [his GitHub page](https://github.com/RobinLinus/snapdrop).
|
To support the original Snapdrop and its creator go to [his GitHub page](https://github.com/RobinLinus/snapdrop).
|
||||||
|
|
||||||
Thanks a lot for supporting free and open software!
|
Thanks a lot for supporting free and open software!
|
||||||
|
|
||||||
|
|
||||||
|
## How to contribute
|
||||||
|
|
||||||
|
Feel free to [open an issue](https://github.com/schlagmichdoch/pairdrop/issues/new/choose) or a
|
||||||
|
[pull request](https://github.com/schlagmichdoch/pairdrop/pulls) but follow
|
||||||
|
[Contributing Guidelines](/CONTRIBUTING.md).
|
||||||
|
|
|
@ -45,9 +45,55 @@ The client expects the server at http(s)://your.domain/server.
|
||||||
When serving the node server behind a proxy, the `X-Forwarded-For` header has to be set by the proxy. Otherwise, all clients that are served by the proxy will be mutually visible.
|
When serving the node server behind a proxy, the `X-Forwarded-For` header has to be set by the proxy. Otherwise, all clients that are served by the proxy will be mutually visible.
|
||||||
|
|
||||||
## Deployment with node
|
## Deployment with node
|
||||||
By default, the node server listens on port 3000.
|
|
||||||
|
|
||||||
Use nginx or apache to set the header correctly:
|
```bash
|
||||||
|
git clone https://github.com/Bellisario/node-snapdrop.git && cd node-snapdrop
|
||||||
|
```
|
||||||
|
|
||||||
|
Install all dependencies with NPM:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
npm install
|
||||||
|
```
|
||||||
|
|
||||||
|
Start the server with:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
npm start
|
||||||
|
```
|
||||||
|
|
||||||
|
### Public Run
|
||||||
|
|
||||||
|
If you want to run in your public "sharable" IP instead of locally, you can use this command:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
node index.js public
|
||||||
|
```
|
||||||
|
or
|
||||||
|
```bash
|
||||||
|
npm start
|
||||||
|
```
|
||||||
|
|
||||||
|
> Remember to check your IP Address using your OS command to see where you can access the server.
|
||||||
|
|
||||||
|
> By default, the node server listens on port 3000.
|
||||||
|
|
||||||
|
#### Automatic restart on error
|
||||||
|
```bash
|
||||||
|
npm start -- --auto-restart
|
||||||
|
```
|
||||||
|
#### Rate limiting requests:
|
||||||
|
```bash
|
||||||
|
npm start -- --rate-limit
|
||||||
|
```
|
||||||
|
|
||||||
|
#### Production (autostart and rate-limit)
|
||||||
|
```bash
|
||||||
|
npm start:prod
|
||||||
|
```
|
||||||
|
|
||||||
|
## HTTP-Server
|
||||||
|
You must use nginx or apache to set the x-forwarded-for header correctly. Otherwise, all clients will be mutually visible.
|
||||||
|
|
||||||
### Using nginx
|
### Using nginx
|
||||||
```
|
```
|
||||||
|
|
66
index.js
66
index.js
|
@ -1,7 +1,7 @@
|
||||||
var process = require('process')
|
const process = require('process')
|
||||||
var crypto = require('crypto')
|
const crypto = require('crypto')
|
||||||
var {spawn} = require('child_process')
|
const {spawn} = require('child_process')
|
||||||
var net = require('net')
|
const net = require('net')
|
||||||
|
|
||||||
// Handle SIGINT
|
// Handle SIGINT
|
||||||
process.on('SIGINT', () => {
|
process.on('SIGINT', () => {
|
||||||
|
@ -29,41 +29,45 @@ process.on('unhandledRejection', (reason, promise) => {
|
||||||
console.log(reason)
|
console.log(reason)
|
||||||
})
|
})
|
||||||
|
|
||||||
process.on(
|
if (process.argv.includes('--auto-restart')) {
|
||||||
'uncaughtException',
|
process.on(
|
||||||
() => {
|
'uncaughtException',
|
||||||
process.once(
|
() => {
|
||||||
'exit',
|
process.once(
|
||||||
() => spawn(
|
'exit',
|
||||||
process.argv.shift(),
|
() => spawn(
|
||||||
process.argv,
|
process.argv.shift(),
|
||||||
{
|
process.argv,
|
||||||
cwd: process.cwd(),
|
{
|
||||||
detached: true,
|
cwd: process.cwd(),
|
||||||
stdio: 'inherit'
|
detached: true,
|
||||||
}
|
stdio: 'inherit'
|
||||||
)
|
}
|
||||||
);
|
)
|
||||||
process.exit();
|
);
|
||||||
}
|
process.exit();
|
||||||
);
|
}
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
const express = require('express');
|
const express = require('express');
|
||||||
const RateLimit = require('express-rate-limit');
|
const RateLimit = require('express-rate-limit');
|
||||||
const http = require('http');
|
const http = require('http');
|
||||||
|
|
||||||
const limiter = RateLimit({
|
|
||||||
windowMs: 5 * 60 * 1000, // 5 minutes
|
|
||||||
max: 1000, // Limit each IP to 100 requests per `window` (here, per 5 minutes)
|
|
||||||
message: 'Too many requests from this IP Address, please try again after 5 minutes.',
|
|
||||||
standardHeaders: true, // Return rate limit info in the `RateLimit-*` headers
|
|
||||||
legacyHeaders: false, // Disable the `X-RateLimit-*` headers
|
|
||||||
})
|
|
||||||
|
|
||||||
const app = express();
|
const app = express();
|
||||||
const port = process.env.PORT || 3000;
|
const port = process.env.PORT || 3000;
|
||||||
|
|
||||||
app.use(limiter);
|
if (process.argv.includes('--rate-limit')) {
|
||||||
|
const limiter = RateLimit({
|
||||||
|
windowMs: 5 * 60 * 1000, // 5 minutes
|
||||||
|
max: 1000, // Limit each IP to 100 requests per `window` (here, per 5 minutes)
|
||||||
|
message: 'Too many requests from this IP Address, please try again after 5 minutes.',
|
||||||
|
standardHeaders: true, // Return rate limit info in the `RateLimit-*` headers
|
||||||
|
legacyHeaders: false, // Disable the `X-RateLimit-*` headers
|
||||||
|
})
|
||||||
|
|
||||||
|
app.use(limiter);
|
||||||
|
}
|
||||||
|
|
||||||
app.use(express.static('public'));
|
app.use(express.static('public'));
|
||||||
|
|
||||||
|
|
|
@ -5,6 +5,7 @@
|
||||||
"main": "index.js",
|
"main": "index.js",
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"start": "node index.js public",
|
"start": "node index.js public",
|
||||||
|
"start:prod": "node index.js public --rate-limit --auto-restart",
|
||||||
"test": "echo \"Error: no test specified\" && exit 1"
|
"test": "echo \"Error: no test specified\" && exit 1"
|
||||||
},
|
},
|
||||||
"author": "",
|
"author": "",
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue