Merge conflict

This commit is contained in:
ThatOneCalculator 2022-03-23 10:15:32 -07:00
commit 94e282b039
5 changed files with 24 additions and 316 deletions

102
README.md
View File

@ -10,11 +10,13 @@
<br>
<p align="center">
<a href="https://github.com/zer0bin-dev/zer0bin/stargazers">
<img alt="Stargazers" src="https://custom-icon-badges.herokuapp.com/github/stars/zer0bin-dev/zer0bin?style=for-the-badge&logo=star&color=f6c177&logoColor=ebbcba&labelColor=191724"></a>
<img alt="Stargazers" src="https://custom-icon-badges.herokuapp.com/github/stars/zer0bin-dev/zer0bin?style=for-the-badge&logo=star&color=f6c177&logoColor=eb6f92&labelColor=191724"></a>
<a href="https://github.com/zer0bin-dev/zer0bin/wiki">
<img alt="Wiki" src="https://custom-icon-badges.herokuapp.com/badge/read_the-wiki-ebbcba?style=for-the-badge&logo=repo&logoColor=eb6f92&labelColor=191724"></a>
<a href="https://github.com/zer0bin-dev/zer0bin/releases/latest">
<img alt="Releases" src="https://img.shields.io/github/release/zer0bin-dev/zer0bin?style=for-the-badge&logo=github&color=31748f&logoColor=ebbcba&labelColor=191724"/></a>
<img alt="Releases" src="https://img.shields.io/github/release/zer0bin-dev/zer0bin?style=for-the-badge&logo=github&color=31748f&logoColor=eb6f92&labelColor=191724"/></a>
<a href="https://github.com/zer0bin-dev/zer0bin/blob/main/LICENSE">
<img alt="License" src="https://custom-icon-badges.herokuapp.com/github/license/zer0bin-dev/zer0bin?style=for-the-badge&logo=law&color=c4a7e7&logoColor=ebbcba&labelColor=191724"></a>
<img alt="License" src="https://custom-icon-badges.herokuapp.com/github/license/zer0bin-dev/zer0bin?style=for-the-badge&logo=law&color=c4a7e7&logoColor=eb6f92&labelColor=191724"></a>
<a href="https://github.com/zer0bin-dev/zer0bin/issues">
<img alt="Issues" src="https://custom-icon-badges.herokuapp.com/github/issues/zer0bin-dev/zer0bin?style=for-the-badge&logo=issue-opened&color=9ccfd8&logoColor=eb6f92&labelColor=191724"></a>
</p>
@ -47,98 +49,12 @@ Submit your public instance [here](https://github.com/Domterion/zer0bin/issues/n
###### (Sorta) made with [Skill Icons](https://skillicons.dev/)
# API
# More info
- **GET** `/api/p/:id` - Get a paste by ID
- **POST** `/api/p/n` - Post a new paste
- **GET** `/api/s` - Get stats about the instance
### Looking for API reference, self-hosting instructions, and/or benchmarks?
# Self-host instructions
### Requirements
- 🦀 [Rust](https://www.rust-lang.org/) ≥ 1.58.0
- 🐈 [Yarn](https://yarnpkg.com/) ≥ 1.0.0
- 🐘 [PostgreSQL](https://www.postgresql.org/) ≥ 9.6
- 🦝 [Nginx](https://www.nginx.com/) ≥ 1.18.0
- 🌾 [Brotli plugin](https://github.com/google/ngx_brotli) recommended
- 🐧 [Linux](https://kernel.org/) or 😈 [FreeBSD](https://freebsd.org/)
- 🌄 Domain with [SSL](https://letsencrypt.org/)
<details>
<summary><h3>Steps</h3></summary>
Please run each command one at a time!
```bash
# export EDITOR=nano
git clone https://github.com/zer0bin-dev/zer0bin && cd zer0bin
$EDITOR example.nginx # Edit as appropriate
mv example.nginx yourdomain.tld
sudo cp ./yourdomain.tld /etc/nginx/sites-available
sudo cp ./yourdomain.tld /etc/nginx/sites-enabled
systemctl nginx restart # Or whichever process manager you use
cd frontend
cp config.example.json config.json
$EDITOR config.json # Edit as appropriate
yarn && yarn build
cd ../backend
psql -f schema.sql -U postgres zer0bin
cp config.example.json config.json
$EDITOR config.json # Edit as appropriate
cargo build --release
./target/release/zer0bin-bin # Preferably in a tmux session or as a service
```
</details>
<details>
<summary><h3>Configuration</h3></summary>
<h3>Backend</h3>
| Key | Values | Description |
| ------------------------------------------ | ------------------------ | ------------------------------------------------------------------------------ |
| server.backend_host | 127.0.0.1 or 0.0.0.0 | The host to run the backend on |
| server.backend_port | Any open port | The port to run the backend on |
| pastes.character_limit | Number up to 2^64 - 1 | The amount of characters allowed in a single paste |
| pastes.days_til_expiration | Number up to 2^63 or -1 | The days till a paste is to expire. If set to -1 then pastes will never expire |
| pastes.id_length | Number up to 2^64 - 1 | The length of the ID for each paste |
| databases.postgres_uri | PostreSQL Connection URI | The URI to use when connecting to a PostgreSQL database |
| ratelimits.seconds_in_between_pastes | Number up to 2^64 - 1 | The seconds between paste uploads |
| ratelimits.allowed_pastes_before_ratelimit | Number up to 2^32 - 1 | Amount of requests that can be made before they are blocked and have to wait |
| logging.on_post_paste | true or false | Log on new paste is made |
| logging.on_get_paste | true or false | Log on paste get |
<h3>Frontend</h3>
| Key | Values | Description |
| --------------- | ---------------------------------- | ------------------------------------------------------------------------------------------------------------------------------- |
| api_url | API URL | The URL of the API. Should be your instance's domain + /api |
| confetti_chance | Positive number from 6 to 2^64 - 1 | The 6 out of \<number\> chance of confetti showing on saving a paste. The default of 40 means there's a 6/40 chance of confetti |
</details>
# Benchmarks
###### Measured with Lighthouse and Firefox Network Performance Analysis
<details>
<summary><h3>Results</h3></summary>
### Homepage
![image](https://user-images.githubusercontent.com/44733677/159571157-64cebfa7-c10b-4597-b493-df9186c07680.png)
![image](https://user-images.githubusercontent.com/44733677/159571670-ca41367f-b3e7-44af-b857-7260ffa6a9b5.png)
![image](https://user-images.githubusercontent.com/44733677/159571586-d03d776d-6a64-4430-aa6b-cecc3796c9a4.png)
### 20 line paste
![image](https://user-images.githubusercontent.com/44733677/159571303-e8ad600c-ffb6-4b06-b5e5-913373999c3a.png)
![image](https://user-images.githubusercontent.com/44733677/159571455-66dc75aa-b2d6-4a39-b6ab-8afe34a64717.png)
![image](https://user-images.githubusercontent.com/44733677/159571491-8afe7dcd-9e64-46fe-b23a-4a2fe2763adf.png)
</details>
<a href="https://github.com/zer0bin-dev/zer0bin/wiki">
<img alt="Stargazers" src="https://custom-icon-badges.herokuapp.com/badge/read_the-wiki-ebbcba?style=for-the-badge&logo=repo&logoColor=eb6f92&labelColor=191724" height=50></a>
# Contributing

4
frontend/config.example.json Executable file → Normal file
View File

@ -1,4 +1,4 @@
{
"api_url": "https://example.tld/api",
"confetti_chance": 40
"api_url": "https://yourdomain.tld/api",
"confetti_chance": "10"
}

View File

@ -9,14 +9,8 @@
"build": "parcel build index.pug"
},
"devDependencies": {
"@parcel/compressor-brotli": "^2.4.0",
"@parcel/compressor-gzip": "^2.4.0",
"@parcel/config-default": "^2.4.0",
"@parcel/transformer-pug": "^2.4.0",
"@parcel/transformer-sass": "^2.4.0",
"@types/core-js": "^2.5.5",
"@types/node": "^17.0.21",
"parcel": "^2.4.0"
"@types/node": "^17.0.21"
},
"description": "just a place to paste",
"repository": "https://github.com/Domterion/zer0bin",
@ -24,9 +18,12 @@
"dependencies": {
"@ant-design/icons": "^4.7.0",
"@ant-design/icons-svg": "^4.2.1",
"@parcel/core": "^2.4.0",
"@parcel/transformer-pug": "^2.4.0",
"highlight.js": "^11.4.0",
"js-confetti": "^0.10.2",
"no-darkreader": "^1.0.1",
"parcel": "^2.4.0",
"smooth-scrollbar": "^8.7.4",
"tippy.js": "^6.3.7"
}

View File

@ -6,7 +6,7 @@ import Scrollbar from "smooth-scrollbar"
import config from "../config.json"
const apiUrl = config.api_url
const confettiChance = config.confetti_chance
const confettiChance = parseInt(config.confetti_chance)
let rawContent = ""
const jsConfetti = new JSConfetti()
@ -164,7 +164,7 @@ async function savePaste() {
rawContent = res["data"]["content"]
viewPaste(rawContent, "0")
const rand = Math.floor(Math.random() * confettiChance)
const rand = Math.floor(Math.random() * confettiChance * 6)
if (rand < 5) {
jsConfetti.addConfetti({

View File

@ -162,24 +162,6 @@ __metadata:
languageName: node
linkType: hard
"@parcel/compressor-brotli@npm:^2.3.2":
version: 2.4.0
resolution: "@parcel/compressor-brotli@npm:2.4.0"
dependencies:
"@parcel/plugin": 2.4.0
checksum: 8da791b8ae2c85e2e2136bd4139ec5abc64721daf859091ff08dac6185fb18cab6462560e56b64bd35f3fd154e31bfc4623f07863386704ae5debcb70ef51188
languageName: node
linkType: hard
"@parcel/compressor-gzip@npm:^2.3.2":
version: 2.4.0
resolution: "@parcel/compressor-gzip@npm:2.4.0"
dependencies:
"@parcel/plugin": 2.4.0
checksum: 63fdc817092564bb467d524c509cd374e9608be080b193e4c515e7c872d4fbf301496210e1291bc49326c4ebe9fe4b3804985670ee806245f6906ac264bd4593
languageName: node
linkType: hard
"@parcel/compressor-raw@npm:2.4.0":
version: 2.4.0
resolution: "@parcel/compressor-raw@npm:2.4.0"
@ -189,7 +171,7 @@ __metadata:
languageName: node
linkType: hard
"@parcel/config-default@npm:2.4.0, @parcel/config-default@npm:^2.3.2":
"@parcel/config-default@npm:2.4.0":
version: 2.4.0
resolution: "@parcel/config-default@npm:2.4.0"
dependencies:
@ -229,7 +211,7 @@ __metadata:
languageName: node
linkType: hard
"@parcel/core@npm:2.4.0":
"@parcel/core@npm:2.4.0, @parcel/core@npm:^2.4.0":
version: 2.4.0
resolution: "@parcel/core@npm:2.4.0"
dependencies:
@ -810,7 +792,7 @@ __metadata:
languageName: node
linkType: hard
"@parcel/transformer-pug@npm:2.4.0":
"@parcel/transformer-pug@npm:^2.4.0":
version: 2.4.0
resolution: "@parcel/transformer-pug@npm:2.4.0"
dependencies:
@ -840,17 +822,6 @@ __metadata:
languageName: node
linkType: hard
"@parcel/transformer-sass@npm:^2.3.2":
version: 2.4.0
resolution: "@parcel/transformer-sass@npm:2.4.0"
dependencies:
"@parcel/plugin": 2.4.0
"@parcel/source-map": ^2.0.0
sass: ^1.38.0
checksum: 591a09b712d14cda935d4d2003c3ae3acf5fc0f034d8f49eadf677ba29cfa378b49f5894daa0701c17d1b359bfb90c007cc4c434096d3cdb37081d46327d608b
languageName: node
linkType: hard
"@parcel/transformer-svg@npm:2.4.0":
version: 2.4.0
resolution: "@parcel/transformer-svg@npm:2.4.0"
@ -1060,16 +1031,6 @@ __metadata:
languageName: node
linkType: hard
"anymatch@npm:~3.1.2":
version: 3.1.2
resolution: "anymatch@npm:3.1.2"
dependencies:
normalize-path: ^3.0.0
picomatch: ^2.0.4
checksum: 985163db2292fac9e5a1e072bf99f1b5baccf196e4de25a0b0b81865ebddeb3b3eb4480734ef0a2ac8c002845396b91aa89121f5b84f93981a4658164a9ec6e9
languageName: node
linkType: hard
"aproba@npm:^1.0.3 || ^2.0.0":
version: 2.0.0
resolution: "aproba@npm:2.0.0"
@ -1126,13 +1087,6 @@ __metadata:
languageName: node
linkType: hard
"binary-extensions@npm:^2.0.0":
version: 2.2.0
resolution: "binary-extensions@npm:2.2.0"
checksum: ccd267956c58d2315f5d3ea6757cf09863c5fc703e50fbeb13a7dc849b812ef76e3cf9ca8f35a0c48498776a7478d7b4a0418e1e2b8cb9cb9731f2922aaad7f8
languageName: node
linkType: hard
"boolbase@npm:^1.0.0":
version: 1.0.0
resolution: "boolbase@npm:1.0.0"
@ -1150,15 +1104,6 @@ __metadata:
languageName: node
linkType: hard
"braces@npm:~3.0.2":
version: 3.0.2
resolution: "braces@npm:3.0.2"
dependencies:
fill-range: ^7.0.1
checksum: e2a8e769a863f3d4ee887b5fe21f63193a891c68b612ddb4b68d82d1b5f3ff9073af066c343e9867a393fe4c2555dcb33e89b937195feb9c1613d259edfcd459
languageName: node
linkType: hard
"browserslist@npm:^4.6.6":
version: 4.20.2
resolution: "browserslist@npm:4.20.2"
@ -1261,25 +1206,6 @@ __metadata:
languageName: node
linkType: hard
"chokidar@npm:>=3.0.0 <4.0.0":
version: 3.5.3
resolution: "chokidar@npm:3.5.3"
dependencies:
anymatch: ~3.1.2
braces: ~3.0.2
fsevents: ~2.3.2
glob-parent: ~5.1.2
is-binary-path: ~2.1.0
is-glob: ~4.0.1
normalize-path: ~3.0.0
readdirp: ~3.6.0
dependenciesMeta:
fsevents:
optional: true
checksum: b49fcde40176ba007ff361b198a2d35df60d9bb2a5aab228279eb810feae9294a6b4649ab15981304447afe1e6ffbf4788ad5db77235dc770ab777c6e771980c
languageName: node
linkType: hard
"chownr@npm:^2.0.0":
version: 2.0.0
resolution: "chownr@npm:2.0.0"
@ -1621,15 +1547,6 @@ __metadata:
languageName: node
linkType: hard
"fill-range@npm:^7.0.1":
version: 7.0.1
resolution: "fill-range@npm:7.0.1"
dependencies:
to-regex-range: ^5.0.1
checksum: cc283f4e65b504259e64fd969bcf4def4eb08d85565e906b7d36516e87819db52029a76b6363d0f02d0d532f0033c9603b9e2d943d56ee3b0d4f7ad3328ff917
languageName: node
linkType: hard
"fs-minipass@npm:^2.0.0, fs-minipass@npm:^2.1.0":
version: 2.1.0
resolution: "fs-minipass@npm:2.1.0"
@ -1646,25 +1563,6 @@ __metadata:
languageName: node
linkType: hard
"fsevents@npm:~2.3.2":
version: 2.3.2
resolution: "fsevents@npm:2.3.2"
dependencies:
node-gyp: latest
checksum: 97ade64e75091afee5265e6956cb72ba34db7819b4c3e94c431d4be2b19b8bb7a2d4116da417950c3425f17c8fe693d25e20212cac583ac1521ad066b77ae31f
conditions: os=darwin
languageName: node
linkType: hard
"fsevents@patch:fsevents@~2.3.2#~builtin<compat/fsevents>":
version: 2.3.2
resolution: "fsevents@patch:fsevents@npm%3A2.3.2#~builtin<compat/fsevents>::version=2.3.2&hash=18f3a7"
dependencies:
node-gyp: latest
conditions: os=darwin
languageName: node
linkType: hard
"function-bind@npm:^1.1.1":
version: 1.1.1
resolution: "function-bind@npm:1.1.1"
@ -1706,15 +1604,6 @@ __metadata:
languageName: node
linkType: hard
"glob-parent@npm:~5.1.2":
version: 5.1.2
resolution: "glob-parent@npm:5.1.2"
dependencies:
is-glob: ^4.0.1
checksum: f4f2bfe2425296e8a47e36864e4f42be38a996db40420fe434565e4480e3322f18eb37589617a98640c5dc8fdec1a387007ee18dbb1f3f5553409c34d17f425e
languageName: node
linkType: hard
"glob@npm:^7.1.3, glob@npm:^7.1.4, glob@npm:^7.2.0":
version: 7.2.0
resolution: "glob@npm:7.2.0"
@ -1893,13 +1782,6 @@ __metadata:
languageName: node
linkType: hard
"immutable@npm:^4.0.0":
version: 4.0.0
resolution: "immutable@npm:4.0.0"
checksum: 4b5e9181e4d5fa06728a481835ec09c86367e5d03268666c95b522b7644ab891098022e4479a43c4c81a68f2ed82f10751ce5d33e208d7b873b6e7f9dfaf4d87
languageName: node
linkType: hard
"import-fresh@npm:^3.2.1":
version: 3.3.0
resolution: "import-fresh@npm:3.3.0"
@ -1962,15 +1844,6 @@ __metadata:
languageName: node
linkType: hard
"is-binary-path@npm:~2.1.0":
version: 2.1.0
resolution: "is-binary-path@npm:2.1.0"
dependencies:
binary-extensions: ^2.0.0
checksum: 84192eb88cff70d320426f35ecd63c3d6d495da9d805b19bc65b518984b7c0760280e57dbf119b7e9be6b161784a5a673ab2c6abe83abb5198a432232ad5b35c
languageName: node
linkType: hard
"is-core-module@npm:^2.8.1":
version: 2.8.1
resolution: "is-core-module@npm:2.8.1"
@ -1990,13 +1863,6 @@ __metadata:
languageName: node
linkType: hard
"is-extglob@npm:^2.1.1":
version: 2.1.1
resolution: "is-extglob@npm:2.1.1"
checksum: df033653d06d0eb567461e58a7a8c9f940bd8c22274b94bf7671ab36df5719791aae15eef6d83bbb5e23283967f2f984b8914559d4449efda578c775c4be6f85
languageName: node
linkType: hard
"is-fullwidth-code-point@npm:^3.0.0":
version: 3.0.0
resolution: "is-fullwidth-code-point@npm:3.0.0"
@ -2004,15 +1870,6 @@ __metadata:
languageName: node
linkType: hard
"is-glob@npm:^4.0.1, is-glob@npm:~4.0.1":
version: 4.0.3
resolution: "is-glob@npm:4.0.3"
dependencies:
is-extglob: ^2.1.1
checksum: d381c1319fcb69d341cc6e6c7cd588e17cd94722d9a32dbd60660b993c4fb7d0f19438674e68dfec686d09b7c73139c9166b47597f846af387450224a8101ab4
languageName: node
linkType: hard
"is-json@npm:^2.0.1":
version: 2.0.1
resolution: "is-json@npm:2.0.1"
@ -2027,13 +1884,6 @@ __metadata:
languageName: node
linkType: hard
"is-number@npm:^7.0.0":
version: 7.0.0
resolution: "is-number@npm:7.0.0"
checksum: 456ac6f8e0f3111ed34668a624e45315201dff921e5ac181f8ec24923b99e9f32ca1a194912dc79d539c97d33dba17dc635202ff0b2cf98326f608323276d27a
languageName: node
linkType: hard
"is-promise@npm:^2.0.0":
version: 2.2.2
resolution: "is-promise@npm:2.2.2"
@ -2393,13 +2243,6 @@ __metadata:
languageName: node
linkType: hard
"normalize-path@npm:^3.0.0, normalize-path@npm:~3.0.0":
version: 3.0.0
resolution: "normalize-path@npm:3.0.0"
checksum: 88eeb4da891e10b1318c4b2476b6e2ecbeb5ff97d946815ffea7794c31a89017c70d7f34b3c2ebf23ef4e9fc9fb99f7dffe36da22011b5b5c6ffa34f4873ec20
languageName: node
linkType: hard
"npmlog@npm:^6.0.0":
version: 6.0.1
resolution: "npmlog@npm:6.0.1"
@ -2460,7 +2303,7 @@ __metadata:
languageName: node
linkType: hard
"parcel@npm:^2.3.2":
"parcel@npm:^2.4.0":
version: 2.4.0
resolution: "parcel@npm:2.4.0"
dependencies:
@ -2533,13 +2376,6 @@ __metadata:
languageName: node
linkType: hard
"picomatch@npm:^2.0.4, picomatch@npm:^2.2.1":
version: 2.3.1
resolution: "picomatch@npm:2.3.1"
checksum: 050c865ce81119c4822c45d3c84f1ced46f93a0126febae20737bd05ca20589c564d6e9226977df859ed5e03dc73f02584a2b0faad36e896936238238b0446cf
languageName: node
linkType: hard
"postcss-value-parser@npm:^4.2.0":
version: 4.2.0
resolution: "postcss-value-parser@npm:4.2.0"
@ -2776,15 +2612,6 @@ __metadata:
languageName: node
linkType: hard
"readdirp@npm:~3.6.0":
version: 3.6.0
resolution: "readdirp@npm:3.6.0"
dependencies:
picomatch: ^2.2.1
checksum: 1ced032e6e45670b6d7352d71d21ce7edf7b9b928494dcaba6f11fba63180d9da6cd7061ebc34175ffda6ff529f481818c962952004d273178acd70f7059b320
languageName: node
linkType: hard
"regenerator-runtime@npm:^0.13.4, regenerator-runtime@npm:^0.13.7":
version: 0.13.9
resolution: "regenerator-runtime@npm:0.13.9"
@ -2857,19 +2684,6 @@ __metadata:
languageName: node
linkType: hard
"sass@npm:^1.38.0":
version: 1.49.9
resolution: "sass@npm:1.49.9"
dependencies:
chokidar: ">=3.0.0 <4.0.0"
immutable: ^4.0.0
source-map-js: ">=0.6.2 <2.0.0"
bin:
sass: sass.js
checksum: e5653e3499274c5127dcb5c9e7c5f6930378fc61764d999a5d8965782e027181ed09714f94836dec74ef55e3a858107fe6c571954c0cab0ad0be5ab8e586829c
languageName: node
linkType: hard
"semver@npm:^5.7.0, semver@npm:^5.7.1":
version: 5.7.1
resolution: "semver@npm:5.7.1"
@ -2950,13 +2764,6 @@ __metadata:
languageName: node
linkType: hard
"source-map-js@npm:>=0.6.2 <2.0.0":
version: 1.0.2
resolution: "source-map-js@npm:1.0.2"
checksum: c049a7fc4deb9a7e9b481ae3d424cc793cb4845daa690bc5a05d428bf41bf231ced49b4cf0c9e77f9d42fdb3d20d6187619fc586605f5eabe995a316da8d377c
languageName: node
linkType: hard
"source-map-support@npm:~0.5.20":
version: 0.5.21
resolution: "source-map-support@npm:0.5.21"
@ -3126,15 +2933,6 @@ __metadata:
languageName: node
linkType: hard
"to-regex-range@npm:^5.0.1":
version: 5.0.1
resolution: "to-regex-range@npm:5.0.1"
dependencies:
is-number: ^7.0.0
checksum: f76fa01b3d5be85db6a2a143e24df9f60dd047d151062d0ba3df62953f2f697b16fe5dad9b0ac6191c7efc7b1d9dcaa4b768174b7b29da89d4428e64bc0a20ed
languageName: node
linkType: hard
"token-stream@npm:1.0.0":
version: 1.0.0
resolution: "token-stream@npm:1.0.0"
@ -3275,17 +3073,14 @@ __metadata:
dependencies:
"@ant-design/icons": ^4.7.0
"@ant-design/icons-svg": ^4.2.1
"@parcel/compressor-brotli": ^2.3.2
"@parcel/compressor-gzip": ^2.3.2
"@parcel/config-default": ^2.3.2
"@parcel/transformer-pug": 2.4.0
"@parcel/transformer-sass": ^2.3.2
"@parcel/core": ^2.4.0
"@parcel/transformer-pug": ^2.4.0
"@types/core-js": ^2.5.5
"@types/node": ^17.0.21
highlight.js: ^11.4.0
js-confetti: ^0.10.2
no-darkreader: ^1.0.1
parcel: ^2.3.2
parcel: ^2.4.0
smooth-scrollbar: ^8.7.4
tippy.js: ^6.3.7
languageName: unknown