├── README.md
├── v1 (failed)
├── backend
│ ├── chromedriver.exe
│ ├── package-lock.json
│ ├── package.json
│ └── server
│ │ ├── index.mjs
│ │ └── rapidgator_script.mjs
└── frontend
│ ├── .gitignore
│ ├── README.md
│ ├── package-lock.json
│ ├── package.json
│ ├── public
│ ├── favicon.ico
│ ├── index.html
│ ├── manifest.json
│ └── robots.txt
│ ├── src
│ ├── App.test.tsx
│ ├── App.tsx
│ ├── bitcoin.png
│ ├── bitcoin2.png
│ ├── etherium.png
│ ├── index.tsx
│ ├── logo.svg
│ ├── monero.png
│ ├── piracy_logo.png
│ └── react-app-env.d.ts
│ └── tsconfig.json
├── v2 (alpha)
├── .gitignore
├── README.md
├── backend
│ ├── .dockerignore
│ ├── dockerfile
│ ├── package-lock.json
│ ├── package.json
│ └── src
│ │ ├── config
│ │ └── firebase.config.js
│ │ └── index.js
└── frontend
│ ├── .gitignore
│ ├── README.md
│ ├── package-lock.json
│ ├── package.json
│ ├── public
│ ├── favicon.ico
│ ├── index.html
│ └── robots.txt
│ ├── src
│ ├── apis
│ │ └── admin-panel.api.js
│ ├── app.tsx
│ ├── components
│ │ ├── assets
│ │ │ ├── piracy_logo.png
│ │ │ └── premium.png
│ │ ├── main.tsx
│ │ └── topnav.tsx
│ ├── config
│ │ └── firebase.config.tsx
│ ├── hooks
│ │ └── AuthUser.tsx
│ ├── index.tsx
│ ├── pages
│ │ ├── 404.tsx
│ │ ├── about.tsx
│ │ ├── admin-panel.jsx
│ │ ├── assets
│ │ │ ├── bitcoin.png
│ │ │ ├── cocodahog.png
│ │ │ ├── etherium.png
│ │ │ ├── hostericons.png
│ │ │ ├── mocrosoft.png
│ │ │ ├── monero.png
│ │ │ ├── piracy_logo.png
│ │ │ ├── premium.png
│ │ │ └── wamy.png
│ │ ├── changeemail.tsx
│ │ ├── donate.tsx
│ │ ├── forgot.tsx
│ │ ├── premium.tsx
│ │ ├── success.tsx
│ │ ├── torrent.tsx
│ │ └── userpanel.tsx
│ └── react-app-env.d.ts
│ └── tsconfig.json
├── v3 (realdebrid)
├── backend
│ ├── .dockerignore
│ ├── .gitignore
│ ├── dockerfile
│ ├── package.json
│ └── src
│ │ ├── config
│ │ ├── admin.json
│ │ ├── firebase.config.js
│ │ └── firebaseadmin.config.js
│ │ └── index.js
└── frontend
│ ├── .gitignore
│ ├── package-lock.json
│ ├── package.json
│ ├── public
│ ├── android-chrome-192x192.png
│ ├── android-chrome-512x512.png
│ ├── apple-touch-icon.png
│ ├── browserconfig.xml
│ ├── favicon-16x16.png
│ ├── favicon-32x32.png
│ ├── favicon.ico
│ ├── index.html
│ ├── mstile-150x150.png
│ ├── robots.txt
│ ├── safari-pinned-tab.svg
│ └── site.webmanifest
│ ├── src
│ ├── apis
│ │ └── admin-panel.api.js
│ ├── app.tsx
│ ├── components
│ │ ├── assets
│ │ │ ├── piracy_logo.png
│ │ │ ├── piracy_logo.png.bk
│ │ │ ├── premium.png
│ │ │ └── premium.png.bk
│ │ ├── main.tsx
│ │ └── topnav.tsx
│ ├── config
│ │ └── firebase.config.tsx
│ ├── hooks
│ │ └── AuthUser.tsx
│ ├── index.tsx
│ ├── pages
│ │ ├── 404.tsx
│ │ ├── about.tsx
│ │ ├── admin-panel.jsx
│ │ ├── assets
│ │ │ ├── bitcoin.png
│ │ │ ├── etherium.png
│ │ │ ├── monero.png
│ │ │ ├── piracy_logo.png
│ │ │ ├── premium.png
│ │ │ └── wamy.png
│ │ ├── changeemail.tsx
│ │ ├── donate.tsx
│ │ ├── forgot.tsx
│ │ ├── premium.tsx
│ │ ├── success.tsx
│ │ ├── torrent.tsx
│ │ └── userpanel.tsx
│ └── react-app-env.d.ts
│ └── tsconfig.json
└── v4 (alldebrid)
├── backend
├── .dockerignore
├── .gitignore
├── dockerfile
├── package-lock.json
├── package.json
└── src
│ ├── config
│ ├── admin.json
│ ├── firebase.config.js
│ └── firebaseadmin.config.js
│ ├── index.js
│ └── views
│ ├── favicon.png
│ ├── index.html
│ └── uptime.js
└── frontend
├── .gitignore
├── package-lock.json
├── package.json
├── public
├── android-chrome-192x192.png
├── android-chrome-512x512.png
├── apple-touch-icon.png
├── browserconfig.xml
├── favicon-16x16.png
├── favicon-32x32.png
├── favicon.ico
├── index.html
├── mstile-150x150.png
├── robots.txt
├── safari-pinned-tab.svg
└── site.webmanifest
├── src
├── apis
│ └── admin-panel.api.js
├── app.tsx
├── components
│ ├── assets
│ │ ├── piracy_logo.png
│ │ ├── piracy_logo.png.bk
│ │ ├── premium.png
│ │ └── premium.png.bk
│ ├── main.tsx
│ └── topnav.tsx
├── config
│ └── firebase.config.tsx
├── hooks
│ └── AuthUser.tsx
├── index.tsx
├── pages
│ ├── 404.tsx
│ ├── about.tsx
│ ├── admin-panel.jsx
│ ├── assets
│ │ ├── bitcoin.png
│ │ ├── etherium.png
│ │ ├── monero.png
│ │ ├── paypal.png
│ │ ├── piracy_logo.png
│ │ ├── premium.png
│ │ ├── stripe.png
│ │ └── wamy.png
│ ├── changeemail.tsx
│ ├── donate.tsx
│ ├── forgot.tsx
│ ├── policies.tsx
│ ├── premium.js
│ ├── success.tsx
│ ├── support.tsx
│ ├── torrent.tsx
│ └── userpanel.tsx
└── react-app-env.d.ts
└── tsconfig.json
/README.md:
--------------------------------------------------------------------------------
1 | # LeechersParadise
2 |
3 | This project has no been archived due to the project being discontinued for many reasons.
4 |
5 | Thank you to the pirate community for making the project fun and enjoyable while it lasted.
6 |
7 | If you are looking to develop on LeechersParadise, or just steal code, go right ahead, nobody is stopping you.
8 | - To run the frontend, just cd into that directory, and run `npm i` followed by `npm run start`
9 | - To run the backend, just cd into that directory, and run `npm i` followed by `npm run dev`
10 |
11 |
12 | -Love, Wamy
13 |
--------------------------------------------------------------------------------
/v1 (failed)/backend/chromedriver.exe:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Wamy-Dev/LeechersParadise/ab9d6493f7e39995c6b84fd54e7b9bcc75a3246e/v1 (failed)/backend/chromedriver.exe
--------------------------------------------------------------------------------
/v1 (failed)/backend/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "linkgenerator-server",
3 | "version": "1.0.0",
4 | "description": "",
5 | "main": "index.mjs",
6 | "type": "module",
7 | "scripts": {
8 | "start": "node server/index.mjs",
9 | "test": "echo \"Error: no test specified\" && exit 1",
10 | "dev": "nodemon server/index.mjs"
11 | },
12 | "author": "",
13 | "license": "ISC",
14 | "dependencies": {
15 | "express": "^4.17.3",
16 | "python-shell": "^3.0.1",
17 | "selenium-webdriver": "^4.1.1"
18 | },
19 | "devDependencies": {
20 | "nodemon": "^2.0.15"
21 | },
22 | "engines": {
23 | "node": "v16.14.0"
24 | }
25 | }
26 |
--------------------------------------------------------------------------------
/v1 (failed)/backend/server/index.mjs:
--------------------------------------------------------------------------------
1 | import express from "express";
2 | import { generateLinks } from "./rapidgator_script.mjs";
3 | const app = express();
4 |
5 | app.use(express.json());
6 | app.use(
7 | express.urlencoded({
8 | extended: true,
9 | })
10 | );
11 |
12 | app.post("/", async (req, res) => {
13 |
14 |
15 | const premiumLink = await generateLinks(req.body.downloadLink);
16 | let rapidgator = "rapidgator.net";
17 | let hitfile = "hitfile.net";
18 |
19 | });
20 |
21 | const PORT = process.env.PORT || 3001;
22 |
23 | app.listen(PORT, console.log(`Server started on port ${PORT}`));
24 |
25 |
26 |
--------------------------------------------------------------------------------
/v1 (failed)/backend/server/rapidgator_script.mjs:
--------------------------------------------------------------------------------
1 | import { Builder, By, Key, until } from "selenium-webdriver";
2 |
3 |
4 | export async function generateLinks(downloadLink) {
5 | let driver = await new Builder().forBrowser("chrome").build();
6 |
7 | try {
8 | await driver.get(downloadLink);
9 | await driver.findElement(By.className("login-open1")).click();
10 | await driver.findElement(By.id("LoginForm_email")).sendKeys("cocothehog@protonmail.com");
11 | await driver.findElement(By.id("LoginForm_password")).sendKeys("qN%se*DR-Pe2@BT");
12 | await driver.findElement(By.className("btn send-message")).click();
13 | const premiumLink = await driver.getCurrentUrl();
14 | return premiumLink;
15 | } finally {
16 | await driver.quit();
17 | }
18 | }
19 |
--------------------------------------------------------------------------------
/v1 (failed)/frontend/.gitignore:
--------------------------------------------------------------------------------
1 | # See https://help.github.com/articles/ignoring-files/ for more about ignoring files.
2 |
3 | # dependencies
4 | /node_modules
5 | /.pnp
6 | .pnp.js
7 |
8 | # testing
9 | /coverage
10 |
11 | # production
12 | /build
13 |
14 | # misc
15 | .DS_Store
16 | .env.local
17 | .env.development.local
18 | .env.test.local
19 | .env.production.local
20 |
21 | npm-debug.log*
22 | yarn-debug.log*
23 | yarn-error.log*
24 |
--------------------------------------------------------------------------------
/v1 (failed)/frontend/README.md:
--------------------------------------------------------------------------------
1 | This is the v1 of Leechers-Paradise, please disregard as the backend is outdated. The front-end will be used in v2.
--------------------------------------------------------------------------------
/v1 (failed)/frontend/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "my-app",
3 | "version": "0.1.0",
4 | "private": true,
5 | "proxy": "http://localhost:3001",
6 | "dependencies": {
7 | "@emotion/react": "^11.8.2",
8 | "@emotion/styled": "^11.8.1",
9 | "@fontsource/roboto": "^4.5.3",
10 | "@material-ui/lab": "^4.0.0-alpha.60",
11 | "@mui/icons-material": "^5.5.1",
12 | "@mui/lab": "^5.0.0-alpha.75",
13 | "@mui/material": "^5.5.1",
14 | "@testing-library/jest-dom": "^5.16.2",
15 | "@testing-library/react": "^12.1.4",
16 | "@testing-library/user-event": "^13.5.0",
17 | "@types/jest": "^27.4.1",
18 | "@types/node": "^16.11.26",
19 | "@types/react": "^17.0.41",
20 | "@types/react-dom": "^17.0.14",
21 | "express": "^4.17.3",
22 | "react": "^17.0.2",
23 | "react-dom": "^17.0.2",
24 | "react-router-dom": "^6.3.0",
25 | "react-scripts": "^5.0.0",
26 | "typescript": "^4.6.2",
27 | "web-vitals": "^2.1.4"
28 | },
29 | "scripts": {
30 | "start": "react-scripts start",
31 | "build": "react-scripts build",
32 | "test": "react-scripts test",
33 | "eject": "react-scripts eject"
34 | },
35 | "eslintConfig": {
36 | "extends": [
37 | "react-app",
38 | "react-app/jest"
39 | ]
40 | },
41 | "browserslist": {
42 | "production": [
43 | ">0.2%",
44 | "not dead",
45 | "not op_mini all"
46 | ],
47 | "development": [
48 | "last 1 chrome version",
49 | "last 1 firefox version",
50 | "last 1 safari version"
51 | ]
52 | }
53 | }
54 |
--------------------------------------------------------------------------------
/v1 (failed)/frontend/public/favicon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Wamy-Dev/LeechersParadise/ab9d6493f7e39995c6b84fd54e7b9bcc75a3246e/v1 (failed)/frontend/public/favicon.ico
--------------------------------------------------------------------------------
/v1 (failed)/frontend/public/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
12 |
13 |
17 |
18 |
27 | React App
28 |
29 |
30 | You need to enable JavaScript to run this app.
31 |
32 |
42 |
43 |
44 |
--------------------------------------------------------------------------------
/v1 (failed)/frontend/public/manifest.json:
--------------------------------------------------------------------------------
1 | {
2 | "short_name": "React App",
3 | "name": "Create React App Sample",
4 | "icons": [
5 | {
6 | "src": "favicon.ico",
7 | "sizes": "64x64 32x32 24x24 16x16",
8 | "type": "image/x-icon"
9 | },
10 | {
11 | "src": "logo192.png",
12 | "type": "image/png",
13 | "sizes": "192x192"
14 | },
15 | {
16 | "src": "logo512.png",
17 | "type": "image/png",
18 | "sizes": "512x512"
19 | }
20 | ],
21 | "start_url": ".",
22 | "display": "standalone",
23 | "theme_color": "#000000",
24 | "background_color": "#ffffff"
25 | }
26 |
--------------------------------------------------------------------------------
/v1 (failed)/frontend/public/robots.txt:
--------------------------------------------------------------------------------
1 | # https://www.robotstxt.org/robotstxt.html
2 | User-agent: *
3 | Disallow:
4 |
--------------------------------------------------------------------------------
/v1 (failed)/frontend/src/App.test.tsx:
--------------------------------------------------------------------------------
1 | import React from "react";
2 | import { render, screen } from "@testing-library/react";
3 | import App from "./App";
4 |
5 | test("renders learn react link", () => {
6 | render( );
7 | const linkElement = screen.getByText(/learn react/i);
8 | expect(linkElement).toBeInTheDocument();
9 | });
10 |
--------------------------------------------------------------------------------
/v1 (failed)/frontend/src/bitcoin.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Wamy-Dev/LeechersParadise/ab9d6493f7e39995c6b84fd54e7b9bcc75a3246e/v1 (failed)/frontend/src/bitcoin.png
--------------------------------------------------------------------------------
/v1 (failed)/frontend/src/bitcoin2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Wamy-Dev/LeechersParadise/ab9d6493f7e39995c6b84fd54e7b9bcc75a3246e/v1 (failed)/frontend/src/bitcoin2.png
--------------------------------------------------------------------------------
/v1 (failed)/frontend/src/etherium.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Wamy-Dev/LeechersParadise/ab9d6493f7e39995c6b84fd54e7b9bcc75a3246e/v1 (failed)/frontend/src/etherium.png
--------------------------------------------------------------------------------
/v1 (failed)/frontend/src/index.tsx:
--------------------------------------------------------------------------------
1 | import React from "react";
2 | import ReactDOM from "react-dom";
3 | import App from "./App";
4 | import express from "express";
5 |
6 | ReactDOM.render( , document.getElementById("root"));
7 |
--------------------------------------------------------------------------------
/v1 (failed)/frontend/src/logo.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/v1 (failed)/frontend/src/monero.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Wamy-Dev/LeechersParadise/ab9d6493f7e39995c6b84fd54e7b9bcc75a3246e/v1 (failed)/frontend/src/monero.png
--------------------------------------------------------------------------------
/v1 (failed)/frontend/src/piracy_logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Wamy-Dev/LeechersParadise/ab9d6493f7e39995c6b84fd54e7b9bcc75a3246e/v1 (failed)/frontend/src/piracy_logo.png
--------------------------------------------------------------------------------
/v1 (failed)/frontend/src/react-app-env.d.ts:
--------------------------------------------------------------------------------
1 | ///
2 | ///
3 | ///
4 |
5 | declare namespace NodeJS {
6 | interface ProcessEnv {
7 | readonly NODE_ENV: "development" | "production" | "test";
8 | readonly PUBLIC_URL: string;
9 | }
10 | }
11 |
12 | declare module "*.avif" {
13 | const src: string;
14 | export default src;
15 | }
16 |
17 | declare module "*.bmp" {
18 | const src: string;
19 | export default src;
20 | }
21 |
22 | declare module "*.gif" {
23 | const src: string;
24 | export default src;
25 | }
26 |
27 | declare module "*.jpg" {
28 | const src: string;
29 | export default src;
30 | }
31 |
32 | declare module "*.jpeg" {
33 | const src: string;
34 | export default src;
35 | }
36 |
37 | declare module "*.png" {
38 | const src: string;
39 | export default src;
40 | }
41 |
42 | declare module "*.webp" {
43 | const src: string;
44 | export default src;
45 | }
46 |
47 | declare module "*.svg" {
48 | import * as React from "react";
49 |
50 | export const ReactComponent: React.FunctionComponent<
51 | React.SVGProps & { title?: string }
52 | >;
53 |
54 | const src: string;
55 | export default src;
56 | }
57 |
58 | declare module "*.module.css" {
59 | const classes: { readonly [key: string]: string };
60 | export default classes;
61 | }
62 |
63 | declare module "*.module.scss" {
64 | const classes: { readonly [key: string]: string };
65 | export default classes;
66 | }
67 |
68 | declare module "*.module.sass" {
69 | const classes: { readonly [key: string]: string };
70 | export default classes;
71 | }
72 |
--------------------------------------------------------------------------------
/v1 (failed)/frontend/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "compilerOptions": {
3 | "target": "es5",
4 | "lib": ["dom", "dom.iterable", "esnext"],
5 | "allowJs": true,
6 | "skipLibCheck": true,
7 | "esModuleInterop": true,
8 | "allowSyntheticDefaultImports": true,
9 | "strict": true,
10 | "forceConsistentCasingInFileNames": true,
11 | "noFallthroughCasesInSwitch": true,
12 | "module": "esnext",
13 | "moduleResolution": "node",
14 | "resolveJsonModule": true,
15 | "isolatedModules": true,
16 | "noEmit": true,
17 | "jsx": "react-jsx"
18 | },
19 | "include": ["src"]
20 | }
21 |
--------------------------------------------------------------------------------
/v2 (alpha)/.gitignore:
--------------------------------------------------------------------------------
1 | # Logs
2 | logs
3 | *.log
4 | npm-debug.log*
5 | yarn-debug.log*
6 | yarn-error.log*
7 | lerna-debug.log*
8 | .pnpm-debug.log*
9 |
10 | # Diagnostic reports (https://nodejs.org/api/report.html)
11 | report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json
12 |
13 | # Runtime data
14 | pids
15 | *.pid
16 | *.seed
17 | *.pid.lock
18 |
19 | # Directory for instrumented libs generated by jscoverage/JSCover
20 | lib-cov
21 |
22 | # Coverage directory used by tools like istanbul
23 | coverage
24 | *.lcov
25 |
26 | # nyc test coverage
27 | .nyc_output
28 |
29 | # Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files)
30 | .grunt
31 |
32 | # Bower dependency directory (https://bower.io/)
33 | bower_components
34 |
35 | # node-waf configuration
36 | .lock-wscript
37 |
38 | # Compiled binary addons (https://nodejs.org/api/addons.html)
39 | build/Release
40 |
41 | # Dependency directories
42 | node_modules/
43 | jspm_packages/
44 |
45 | # Snowpack dependency directory (https://snowpack.dev/)
46 | web_modules/
47 |
48 | # TypeScript cache
49 | *.tsbuildinfo
50 |
51 | # Optional npm cache directory
52 | .npm
53 |
54 | # Optional eslint cache
55 | .eslintcache
56 |
57 | # Optional stylelint cache
58 | .stylelintcache
59 |
60 | # Microbundle cache
61 | .rpt2_cache/
62 | .rts2_cache_cjs/
63 | .rts2_cache_es/
64 | .rts2_cache_umd/
65 |
66 | # Optional REPL history
67 | .node_repl_history
68 |
69 | # Output of 'npm pack'
70 | *.tgz
71 |
72 | # Yarn Integrity file
73 | .yarn-integrity
74 |
75 | # dotenv environment variable files
76 | .env
77 | .env.development.local
78 | .env.test.local
79 | .env.production.local
80 | .env.local
81 |
82 | # parcel-bundler cache (https://parceljs.org/)
83 | .cache
84 | .parcel-cache
85 |
86 | # Next.js build output
87 | .next
88 | out
89 |
90 | # Nuxt.js build / generate output
91 | .nuxt
92 | dist
93 |
94 | # Gatsby files
95 | .cache/
96 | # Comment in the public line in if your project uses Gatsby and not Next.js
97 | # https://nextjs.org/blog/next-9-1#public-directory-support
98 | # public
99 |
100 | # vuepress build output
101 | .vuepress/dist
102 |
103 | # vuepress v2.x temp and cache directory
104 | .temp
105 | .cache
106 |
107 | # Docusaurus cache and generated files
108 | .docusaurus
109 |
110 | # Serverless directories
111 | .serverless/
112 |
113 | # FuseBox cache
114 | .fusebox/
115 |
116 | # DynamoDB Local files
117 | .dynamodb/
118 |
119 | # TernJS port file
120 | .tern-port
121 |
122 | # Stores VSCode versions used for testing VSCode extensions
123 | .vscode-test
124 |
125 | # yarn v2
126 | .yarn/cache
127 | .yarn/unplugged
128 | .yarn/build-state.yml
129 | .yarn/install-state.gz
130 | .pnp.*
--------------------------------------------------------------------------------
/v2 (alpha)/README.md:
--------------------------------------------------------------------------------
1 | * To run front end (v1): cd v1/frontend$ npm start
2 | * To run back end (v1): cd v1/backend$ npm start
3 | * To run front end (v2): cd v2/frontend$ npm start
4 | * To run back end (v2): cd v2/backend$ npm run dev
5 | * To run frontend production (v2): cd v2/frontend$ npm run build THEN serve -s build
6 | * To run backend production (v2): cd v2/backend$ npm run start
7 | * To run stripe (v2): cd v2/backend$ ./stripe listen --forward-to https://api.leechersparadise.com/webhook
8 |
--------------------------------------------------------------------------------
/v2 (alpha)/backend/.dockerignore:
--------------------------------------------------------------------------------
1 | node_modules
2 | npm-debug.log
--------------------------------------------------------------------------------
/v2 (alpha)/backend/dockerfile:
--------------------------------------------------------------------------------
1 | FROM node:16
2 | WORKDIR /usr/src/app
3 | COPY package*.json ./
4 | RUN npm install --omit=dev
5 | COPY . .
6 |
7 | EXPOSE 3001
8 | CMD [ "node", "src/index.js" ]
9 |
--------------------------------------------------------------------------------
/v2 (alpha)/backend/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "backend",
3 | "version": "1.0.0",
4 | "description": "",
5 | "main": "index.js",
6 | "homepage": ".",
7 | "scripts": {
8 | "dev": "nodemon src/index.js",
9 | "devv": "node src/index.js",
10 | "start": "node src/index.js NODE_ENV=production node"
11 | },
12 | "author": "",
13 | "license": "ISC",
14 | "dependencies": {
15 | "all-debrid-api": "^1.1.0",
16 | "body-parser": "^1.20.0",
17 | "compression": "^1.7.4",
18 | "cors": "^2.8.5",
19 | "dotenv": "^16.0.0",
20 | "download": "^8.0.0",
21 | "express": "^4.17.3",
22 | "express-http-proxy": "^1.6.3",
23 | "express-queue": "^0.0.13",
24 | "express-rate-limit": "^6.4.0",
25 | "firebase": "^9.6.10",
26 | "got": "^12.1.0",
27 | "helmet": "^5.1.0",
28 | "morgan": "^1.10.0",
29 | "mysql": "^2.18.1",
30 | "node-real-debrid": "^1.0.6",
31 | "nodemailer": "^6.7.5",
32 | "nodemon": "^2.0.15",
33 | "real-debrid-api": "^1.1.0",
34 | "request-ip": "^2.2.0",
35 | "sqlite3": "^5.0.8",
36 | "stripe": "^9.0.0",
37 | "ts-node": "^10.8.0"
38 | },
39 | "devDependencies": {
40 | "http-proxy-middleware": "^2.0.6"
41 | }
42 | }
43 |
--------------------------------------------------------------------------------
/v2 (alpha)/backend/src/config/firebase.config.js:
--------------------------------------------------------------------------------
1 | const {initializeApp} = require('firebase/app')
2 | const firebaseConfig = {
3 | apiKey: process.env.apiKey,
4 | authDomain: process.env.authDomain,
5 | projectId: process.env.projectId,
6 | storageBucket: process.env.storageBucket,
7 | messagingSenderId: process.env.messagingSenderId,
8 | appId: process.env.appId,
9 | measurementId: process.env.measurementId,
10 | }
11 | function createFirebaseApp(config) {
12 | const firebaseApp = initializeApp(config)
13 | return firebaseApp
14 | }
15 | const firebaseApp = createFirebaseApp(firebaseConfig)
16 | module.exports = {
17 | firebaseApp
18 | }
--------------------------------------------------------------------------------
/v2 (alpha)/frontend/.gitignore:
--------------------------------------------------------------------------------
1 | # See https://help.github.com/articles/ignoring-files/ for more about ignoring files.
2 |
3 | # dependencies
4 | /node_modules
5 | /.pnp
6 | .pnp.js
7 |
8 | # testing
9 | /coverage
10 |
11 | # production
12 | /build
13 |
14 | # misc
15 | .DS_Store
16 | .env.local
17 | .env.development.local
18 | .env.test.local
19 | .env.production.local
20 |
21 | npm-debug.log*
22 | yarn-debug.log*
23 | yarn-error.log*
24 |
--------------------------------------------------------------------------------
/v2 (alpha)/frontend/README.md:
--------------------------------------------------------------------------------
1 | * To run front end (v1): cd v1/frontend$ npm start
2 | * To run back end (v1): cd v1/backend$ npm start
3 |
4 | - dev at dev.leechersparadise.com
5 | - web at leechersparadise.com
6 | - api at api.leechersparadise.com
7 |
--------------------------------------------------------------------------------
/v2 (alpha)/frontend/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "my-app",
3 | "version": "0.1.0",
4 | "private": true,
5 | "dependencies": {
6 | "@ctrl/react-adsense": "^1.6.0",
7 | "@emotion/react": "^11.8.2",
8 | "@emotion/styled": "^11.8.1",
9 | "@fontsource/roboto": "^4.5.3",
10 | "@material-ui/icons": "^4.11.3",
11 | "@material-ui/lab": "^4.0.0-alpha.60",
12 | "@material/top-app-bar": "^13.0.0",
13 | "@mui/icons-material": "^5.5.1",
14 | "@mui/lab": "^5.0.0-alpha.75",
15 | "@mui/material": "^5.5.1",
16 | "@mui/styles": "^5.8.6",
17 | "@types/jest": "^27.4.1",
18 | "@types/react": "^17.0.41",
19 | "@types/react-dom": "^17.0.14",
20 | "chalk": "^5.0.1",
21 | "chalk-animation": "^2.0.2",
22 | "file-saver": "^2.0.5",
23 | "firebase": "^9.8.1",
24 | "react": "^17.0.2",
25 | "react-copy-to-clipboard": "^5.1.0",
26 | "react-device-detect": "^2.2.2",
27 | "react-dom": "^17.0.2",
28 | "react-router-dom": "^6.3.0",
29 | "react-scripts": "^5.0.0",
30 | "serve": "^13.0.2",
31 | "terminal-link": "^3.0.0",
32 | "typescript": "^4.6.2"
33 | },
34 | "scripts": {
35 | "start": "react-scripts start",
36 | "build": "react-scripts build",
37 | "test": "react-scripts test",
38 | "eject": "react-scripts eject"
39 | },
40 | "eslintConfig": {
41 | "extends": [
42 | "react-app",
43 | "react-app/jest"
44 | ]
45 | },
46 | "browserslist": {
47 | "production": [
48 | ">0.2%",
49 | "not dead",
50 | "not op_mini all"
51 | ],
52 | "development": [
53 | "last 1 chrome version",
54 | "last 1 firefox version",
55 | "last 1 safari version"
56 | ]
57 | },
58 | "devDependencies": {
59 | "@types/node": "^18.0.1"
60 | }
61 | }
62 |
--------------------------------------------------------------------------------
/v2 (alpha)/frontend/public/favicon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Wamy-Dev/LeechersParadise/ab9d6493f7e39995c6b84fd54e7b9bcc75a3246e/v2 (alpha)/frontend/public/favicon.ico
--------------------------------------------------------------------------------
/v2 (alpha)/frontend/public/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
14 | Leechers Paradise
15 |
16 |
17 | You need to enable JavaScript to run this app.
18 |
21 |
22 |
23 |
--------------------------------------------------------------------------------
/v2 (alpha)/frontend/public/robots.txt:
--------------------------------------------------------------------------------
1 | # https://www.robotstxt.org/robotstxt.html
2 | User-agent: *
3 | Disallow:
4 |
--------------------------------------------------------------------------------
/v2 (alpha)/frontend/src/apis/admin-panel.api.js:
--------------------------------------------------------------------------------
1 | export async function saveAdminPanel(formState) {
2 | return await fetch('https://api.leechersparadise.com/admin', {
3 | method: 'POST', // or 'PUT'
4 | headers: {
5 | 'Content-Type': 'application/json',
6 | },
7 | body: JSON.stringify(formState),
8 | })
9 | }
10 | export async function getAdminPanel() {
11 | return await fetch('https://api.leechersparadise.com/admin', {
12 | method: 'GET', // or 'PUT'
13 | headers: {
14 | 'Content-Type': 'application/json',
15 | }
16 | })
17 | }
--------------------------------------------------------------------------------
/v2 (alpha)/frontend/src/app.tsx:
--------------------------------------------------------------------------------
1 | import {
2 | BrowserRouter as Router,
3 | Routes,
4 | Route
5 | } from "react-router-dom";
6 | import Main from "./components/main";
7 | import AdminPanel from "./pages/admin-panel";
8 | import About from "./pages/about";
9 | import ButtonAppBar from "./components/topnav";
10 | import UserPanel from "./pages/userpanel";
11 | import Premium from "./pages/premium";
12 | import Donate from "./pages/donate";
13 | import NotFound from "./pages/404";
14 | import Success from "./pages/success"
15 | import Forgot from "./pages/forgot"
16 | import Torrent from "./pages/torrent"
17 | import ChangeEmail from './pages/changeemail'
18 | export default function App() {
19 | return (
20 |
21 |
22 |
23 |
24 | } />
25 | } />
26 | } />
27 | } />
28 | } />
29 | } />
30 | } />
31 | } />
32 | } />
33 | } />
34 | } />
35 |
36 |
37 |
38 | );
39 | }
40 |
--------------------------------------------------------------------------------
/v2 (alpha)/frontend/src/components/assets/piracy_logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Wamy-Dev/LeechersParadise/ab9d6493f7e39995c6b84fd54e7b9bcc75a3246e/v2 (alpha)/frontend/src/components/assets/piracy_logo.png
--------------------------------------------------------------------------------
/v2 (alpha)/frontend/src/components/assets/premium.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Wamy-Dev/LeechersParadise/ab9d6493f7e39995c6b84fd54e7b9bcc75a3246e/v2 (alpha)/frontend/src/components/assets/premium.png
--------------------------------------------------------------------------------
/v2 (alpha)/frontend/src/components/topnav.tsx:
--------------------------------------------------------------------------------
1 | import * as React from 'react';
2 | import AppBar from '@mui/material/AppBar';
3 | import Box from '@mui/material/Box';
4 | import Toolbar from '@mui/material/Toolbar';
5 | import Typography from '@mui/material/Typography';
6 | import Button from '@mui/material/Button';
7 | import IconButton from '@mui/material/IconButton';
8 | import MenuIcon from '@mui/icons-material/Menu';
9 | import Menu from '@mui/material/Menu';
10 | import MenuItem from '@mui/material/MenuItem';
11 | import Fade from '@mui/material/Fade';
12 | import { Link } from 'react-router-dom'
13 | import { createTheme, ThemeProvider } from '@mui/material/styles';
14 | import { useAuthUser } from '../hooks/AuthUser';
15 | import { signOut } from 'firebase/auth';
16 | import { fireAuth } from '../config/firebase.config';
17 | import { Logout } from '@mui/icons-material';
18 | const NewthemeDark = createTheme({
19 | palette: {
20 | mode: "dark",
21 | background: {
22 | default: "#333333"
23 | },
24 | primary: {
25 | main: '#5E2BE2',
26 | },
27 | secondary: {
28 | main: '#50c878',
29 | },
30 | text: {
31 | primary: "#ffffff"
32 | },
33 | },
34 | typography: {
35 | fontFamily: [
36 | 'Lato',
37 | 'sans-serif',
38 | ].join(','),
39 | },
40 | });
41 |
42 | export default function ButtonAppBar() {
43 | const [anchorEl, setAnchorEl] = React.useState(null);
44 | const user = useAuthUser()
45 | const open = Boolean(anchorEl);
46 | const handleClick = (event: React.MouseEvent) => {
47 | setAnchorEl(event.currentTarget);
48 | };
49 | const handleClose = () => {
50 | setAnchorEl(null);
51 | };
52 |
53 | const logout = () => {
54 | signOut(fireAuth)
55 | }
56 | return (
57 | <>
58 |
59 |
60 |
61 |
62 |
70 |
71 |
72 |
73 |
74 |
77 | {user ? user?.email : 'User Panel'}
78 | {user &&
79 |
84 | }
85 |
86 |
87 |
88 |
89 |
90 |
108 |
109 | >
110 | );
111 | }
112 |
--------------------------------------------------------------------------------
/v2 (alpha)/frontend/src/config/firebase.config.tsx:
--------------------------------------------------------------------------------
1 | import { FirebaseOptions, getApps, getApp, initializeApp } from 'firebase/app'
2 | import { getAnalytics } from 'firebase/analytics'
3 | import { getAuth, User } from 'firebase/auth'
4 | import { getFirestore } from '@firebase/firestore'
5 | import { getStorage } from '@firebase/storage'
6 | const firebaseConfig = {
7 | // Your web app's Firebase configuration
8 | }
9 | function createFirebaseApp(config: FirebaseOptions) {
10 | if (!getApps.length) {
11 | const firebaseApp = initializeApp(config)
12 | if (typeof window !== 'undefined') {
13 | if ('measurementId' in firebaseConfig) {
14 | getAnalytics()
15 | }
16 | return firebaseApp
17 | }
18 | return firebaseApp
19 | } else {
20 | return getApp()
21 | }
22 | }
23 | const firebaseApp = createFirebaseApp(firebaseConfig)
24 | export const fireAuth = getAuth(firebaseApp)
25 | export const fireStore = getFirestore(firebaseApp)
26 | export const fireStorage = getStorage(firebaseApp)
27 | export const auth = {
28 | currentUser: null as (User | null),
29 | token : ''
30 | }
--------------------------------------------------------------------------------
/v2 (alpha)/frontend/src/hooks/AuthUser.tsx:
--------------------------------------------------------------------------------
1 | import {useEffect, useState } from "react";
2 | import {auth, fireAuth } from "../config/firebase.config";
3 |
4 | export function useAuthUser(): user | null {
5 | const [currentUser, setCurrentUser] = useState(null);
6 |
7 | function handleStatusChange(user) {
8 | setCurrentUser(user);
9 | }
10 |
11 | useEffect(() => {
12 | fireAuth.onAuthStateChanged((user) => {
13 | user?.getIdToken().then((token) => {
14 | auth.token = token
15 | })
16 | auth.currentUser = user
17 | handleStatusChange(user)
18 | })
19 | });
20 |
21 | return currentUser;
22 | }
23 |
24 | export interface user {
25 | email: string
26 | }
--------------------------------------------------------------------------------
/v2 (alpha)/frontend/src/index.tsx:
--------------------------------------------------------------------------------
1 | import ReactDOM from 'react-dom';
2 | import App from "./app";
3 | ReactDOM.render( , document.getElementsByClassName('root')[0]);
4 |
--------------------------------------------------------------------------------
/v2 (alpha)/frontend/src/pages/404.tsx:
--------------------------------------------------------------------------------
1 | import { createTheme, ThemeProvider} from '@mui/material/styles';
2 | import Box from '@mui/material/Box';
3 | import CssBaseline from '@mui/material/CssBaseline';
4 | import { Link } from 'react-router-dom'
5 |
6 |
7 | const NewthemeDark = createTheme({
8 | palette: {
9 | mode: "dark",
10 | background: {
11 | default: "#333333"
12 | },
13 | primary: {
14 | main: '#5E2BE2',
15 | },
16 | secondary: {
17 | main: '#50c878',
18 | },
19 | text: {
20 | primary: "#ffffff"
21 | },
22 | },
23 | typography: {
24 | fontFamily: [
25 | 'Lato',
26 | 'sans-serif',
27 | ].join(','),
28 | },
29 | });
30 | export default function NotFound() {
31 | return (
32 |
33 |
34 |
35 |
36 |
404, you aren't supposed to be here...
37 | Lets take you back to the main page.
38 |
39 |
40 |
41 |
42 | )
43 | }
--------------------------------------------------------------------------------
/v2 (alpha)/frontend/src/pages/admin-panel.jsx:
--------------------------------------------------------------------------------
1 | import {
2 | Alert,
3 | Card,
4 | CardContent,
5 | CardHeader,
6 | TextField
7 | } from "@mui/material";
8 | import Container from "@mui/material/Container";
9 | import Button from "@mui/material/Button";
10 | import Grid from "@mui/material/Grid";
11 | import Box from "@mui/material/Box";
12 | import {Link} from "react-router-dom";
13 | import HomeIcon from '@mui/icons-material/Home'
14 | import {useState, useEffect} from "react";
15 | import Snackbar from '@mui/material/Snackbar';
16 | import { createMuiTheme, ThemeProvider} from '@mui/material/styles';
17 | import CssBaseline from '@mui/material/CssBaseline';
18 | import {saveAdminPanel, getAdminPanel} from "../apis/admin-panel.api";
19 | export default function AdminPanel() {
20 | const [formState, setFormState] = useState({dollarvalue: '', dollargoal: ''});
21 | const [alert, setAlert] = useState({message: '', severity: ''});
22 | const [open, setOpen] = useState(false);
23 | const handleClose = (event, reason) => {
24 | if (reason === 'clickaway') {
25 | return;
26 | }
27 | setOpen(false);
28 | };
29 | async function save(event) {
30 | event.preventDefault()
31 | try {
32 | const result = await saveAdminPanel(formState)
33 | if (result.status !== 200) throw 'Error'
34 | setAlert({message: 'Success! Added values to the donation bar.', severity: 'success'});
35 | setOpen(true)
36 | } catch(ex) {
37 | setAlert({message: 'Failure! Something went wrong.', severity:'error'});
38 | setOpen(true)
39 | }
40 | }
41 | useEffect(async () => {
42 | const response = await getAdminPanel();
43 | const result = await response.json()
44 | setFormState({dollargoal: result.dollarGoal, dollarvalue: result.dollarValue})
45 | },[])
46 | const NewthemeDark = createMuiTheme({
47 | palette: {
48 | mode: "dark",
49 | background: {
50 | default: "#333333"
51 | },
52 | primary: {
53 | main: '#5E2BE2',
54 | },
55 | secondary: {
56 | main: '#50c878',
57 | },
58 | text: {
59 | primary: "#ffffff"
60 | },
61 | },
62 | typography: {
63 | fontFamily: [
64 | 'Lato',
65 | 'sans-serif',
66 | ].join(','),
67 | },
68 | });
69 | return (
70 |
71 |
72 |
73 |
74 |
75 |
76 |
77 |
82 |
83 |
84 |
85 |
122 |
123 |
124 |
125 |
126 |
127 | {alert.message}
128 |
129 |
130 |
131 |
132 |
133 |
134 | )
135 | }
--------------------------------------------------------------------------------
/v2 (alpha)/frontend/src/pages/assets/bitcoin.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Wamy-Dev/LeechersParadise/ab9d6493f7e39995c6b84fd54e7b9bcc75a3246e/v2 (alpha)/frontend/src/pages/assets/bitcoin.png
--------------------------------------------------------------------------------
/v2 (alpha)/frontend/src/pages/assets/cocodahog.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Wamy-Dev/LeechersParadise/ab9d6493f7e39995c6b84fd54e7b9bcc75a3246e/v2 (alpha)/frontend/src/pages/assets/cocodahog.png
--------------------------------------------------------------------------------
/v2 (alpha)/frontend/src/pages/assets/etherium.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Wamy-Dev/LeechersParadise/ab9d6493f7e39995c6b84fd54e7b9bcc75a3246e/v2 (alpha)/frontend/src/pages/assets/etherium.png
--------------------------------------------------------------------------------
/v2 (alpha)/frontend/src/pages/assets/hostericons.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Wamy-Dev/LeechersParadise/ab9d6493f7e39995c6b84fd54e7b9bcc75a3246e/v2 (alpha)/frontend/src/pages/assets/hostericons.png
--------------------------------------------------------------------------------
/v2 (alpha)/frontend/src/pages/assets/mocrosoft.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Wamy-Dev/LeechersParadise/ab9d6493f7e39995c6b84fd54e7b9bcc75a3246e/v2 (alpha)/frontend/src/pages/assets/mocrosoft.png
--------------------------------------------------------------------------------
/v2 (alpha)/frontend/src/pages/assets/monero.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Wamy-Dev/LeechersParadise/ab9d6493f7e39995c6b84fd54e7b9bcc75a3246e/v2 (alpha)/frontend/src/pages/assets/monero.png
--------------------------------------------------------------------------------
/v2 (alpha)/frontend/src/pages/assets/piracy_logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Wamy-Dev/LeechersParadise/ab9d6493f7e39995c6b84fd54e7b9bcc75a3246e/v2 (alpha)/frontend/src/pages/assets/piracy_logo.png
--------------------------------------------------------------------------------
/v2 (alpha)/frontend/src/pages/assets/premium.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Wamy-Dev/LeechersParadise/ab9d6493f7e39995c6b84fd54e7b9bcc75a3246e/v2 (alpha)/frontend/src/pages/assets/premium.png
--------------------------------------------------------------------------------
/v2 (alpha)/frontend/src/pages/assets/wamy.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Wamy-Dev/LeechersParadise/ab9d6493f7e39995c6b84fd54e7b9bcc75a3246e/v2 (alpha)/frontend/src/pages/assets/wamy.png
--------------------------------------------------------------------------------
/v2 (alpha)/frontend/src/pages/donate.tsx:
--------------------------------------------------------------------------------
1 | import { createTheme, ThemeProvider} from '@mui/material/styles';
2 | import Box from '@mui/material/Box';
3 | import CssBaseline from '@mui/material/CssBaseline';
4 | import Button from '@mui/material/Button';
5 | import Divider from '@mui/material/Divider';
6 | import { Link } from 'react-router-dom'
7 | import Monero from './assets/monero.png';
8 | import Bitcoin from './assets/bitcoin.png';
9 | import Etherium from './assets/etherium.png';
10 | import cocodahog from './assets/cocodahog.png';
11 | import wamy from './assets/wamy.png';
12 | import mocrosoft from './assets/mocrosoft.png';
13 | import {CopyToClipboard} from 'react-copy-to-clipboard';
14 | import { BrowserView } from 'react-device-detect';
15 |
16 | const NewthemeDark = createTheme({
17 | palette: {
18 | mode: "dark",
19 | background: {
20 | default: "#333333"
21 | },
22 | primary: {
23 | main: '#5E2BE2',
24 | },
25 | secondary: {
26 | main: '#50c878',
27 | },
28 | text: {
29 | primary: "#ffffff"
30 | },
31 | },
32 | typography: {
33 | fontFamily: [
34 | 'Lato',
35 | 'sans-serif',
36 | ].join(','),
37 | },
38 | });
39 | export default function About() {
40 | return (
41 |
42 |
43 |
44 |
45 |
46 |
Support LeechersParadise
47 |
48 |
49 |
Hi!
50 |
Thank you for considering to support our project.
51 |
If you enjoy this service, donate today, so we can use 100% of your support to further develop this project.
52 |
53 |
54 |
55 |
You can choose to support us via cryptocurrencies:
56 |
57 |
Monero
58 |
59 |
60 | 46XuKBQPLjrfdoKB7oXRyo2dZETJFF7xmSparT7iLjSJ14KohnyCKVeTzo7sdC2A8HUty9PHQyUjpJkhGm9kLVc4HhUjE6q
61 |
62 |
63 | Copy XMR Address
65 |
66 |
67 |
Bitcoin
68 |
69 |
70 | bc1q9x28smqehp4semejjkfs2slr8gugej0fpw5rdx
71 |
72 |
73 | Copy BTC Address
75 |
76 |
77 |
Etherium
78 |
79 |
80 | 0xe4E96A7833c1A43187A88870566a83e37386BA25
81 |
82 |
83 | Copy ETH Address
87 |
88 |
89 |
90 |
PayPal
91 |
92 |
You may choose to donate to any of these PayPal links. These are each of the developers that brought this project togther:
93 |
94 |
Wamy
95 |
96 |
Donate to : Here
97 |
98 |
99 |
If you have any questions or problems should occur, please notify us on contact@leechersparadise.com or message us on our Discord: Here .
100 |
Do you hate crypto and think it's stupid, but still want to support our cause? Then you should consider signing up to premium.
101 |
102 |
103 |
104 |
105 | )
106 | }
--------------------------------------------------------------------------------
/v2 (alpha)/frontend/src/pages/forgot.tsx:
--------------------------------------------------------------------------------
1 | import { createTheme, ThemeProvider} from '@mui/material/styles';
2 | import Box from '@mui/material/Box';
3 | import CssBaseline from '@mui/material/CssBaseline';
4 | import ClickAwayListener from '@mui/material/ClickAwayListener';
5 | import * as React from 'react';
6 | import Tooltip from '@mui/material/Tooltip';
7 | import Button from '@mui/material/Button';
8 | import TextField from '@mui/material/TextField';
9 | import { sendPasswordResetEmail } from "firebase/auth";
10 | import { fireAuth } from '../config/firebase.config';
11 | import Container from '@mui/material/Container';
12 | import Dialog from '@mui/material/Dialog';
13 | import DialogActions from '@mui/material/DialogActions';
14 | import DialogContent from '@mui/material/DialogContent';
15 | import DialogContentText from '@mui/material/DialogContentText';
16 | import DialogTitle from '@mui/material/DialogTitle';
17 | import Slide from '@mui/material/Slide';
18 | import { TransitionProps } from '@mui/material/transitions';
19 | const NewthemeDark = createTheme({
20 | palette: {
21 | mode: "dark",
22 | background: {
23 | default: "#333333"
24 | },
25 | primary: {
26 | main: '#5E2BE2',
27 | },
28 | secondary: {
29 | main: '#50c878',
30 | },
31 | text: {
32 | primary: "#ffffff"
33 | },
34 | },
35 | typography: {
36 | fontFamily: [
37 | 'Lato',
38 | 'sans-serif',
39 | ].join(','),
40 | },
41 | });
42 | const Transition = React.forwardRef(function Transition(
43 | props: TransitionProps & {
44 | children: React.ReactElement;
45 | },
46 | ref: React.Ref,
47 | ) {
48 | return ;
49 | });
50 | export default function Forgot() {
51 | const [open, setOpen] = React.useState(false);
52 | const [dopen, setdOpen] = React.useState(false);
53 | const handleTooltipClose = () => {
54 | setOpen(false);
55 | };
56 | const handledClose = () => {
57 | setdOpen(false);
58 | };
59 | const handleSubmit = (event: React.FormEvent) => {
60 | event.preventDefault()
61 | const form = event.currentTarget
62 | const data = new FormData(event.currentTarget);
63 | const email = data.get('email') as string
64 | sendPasswordResetEmail(fireAuth, email)
65 | .then(() => {
66 | form.reset();
67 | setdOpen(true);
68 | })
69 | .catch(error => {
70 | setOpen(true);
71 | })
72 | }
73 | return (
74 |
75 |
76 |
77 |
78 |
79 |
80 |
Forgot Password
81 |
82 |
Here you can receive your password again. Please enter your email that you use to login, to get your password reset.
83 |
84 |
85 |
87 |
98 | Submit
99 |
100 |
107 | {"Password reset sent! 📬"}
108 |
109 |
110 | Please check your email for the reset link.
111 |
112 |
113 |
114 | Close
115 |
116 |
117 |
118 |
119 |
120 |
121 |
122 |
123 | )
124 | }
--------------------------------------------------------------------------------
/v2 (alpha)/frontend/src/pages/premium.tsx:
--------------------------------------------------------------------------------
1 | import * as React from 'react';
2 | import { createTheme, ThemeProvider} from '@mui/material/styles';
3 | import Box from '@mui/material/Box';
4 | import Button from '@mui/material/Button';
5 | import Card from '@mui/material/Card';
6 | import CardActions from '@mui/material/CardActions';
7 | import CardContent from '@mui/material/CardContent';
8 | import CardHeader from '@mui/material/CardHeader';
9 | import CssBaseline from '@mui/material/CssBaseline';
10 | import Grid from '@mui/material/Grid';
11 | import StarIcon from '@mui/icons-material/StarBorder';
12 | import Typography from '@mui/material/Typography';
13 | import GlobalStyles from '@mui/material/GlobalStyles';
14 | import Container from '@mui/material/Container';
15 | const NewthemeDark = createTheme({
16 | palette: {
17 | mode: "dark",
18 | background: {
19 | default: "#333333"
20 | },
21 | primary: {
22 | main: '#5E2BE2',
23 | },
24 | secondary: {
25 | main: '#50c878',
26 | },
27 | text: {
28 | primary: "#ffffff"
29 | },
30 | },
31 | typography: {
32 | fontFamily: [
33 | 'Lato',
34 | 'sans-serif',
35 | ].join(','),
36 | },
37 | });
38 | const tiers = [
39 | {
40 | title: 'Free',
41 | subheader: 'Anonymous User',
42 | price: '$0',
43 | description: [
44 | 'All features',
45 | 'Download 10 files/day',
46 | '50gb File Cap'
47 | ],
48 | buttonText: 'Default',
49 | buttonVariant: 'disabled',
50 | },
51 | {
52 | title: 'Premium',
53 | subheader: 'Unlocks Premium',
54 | link: 'premium',
55 | price: '$2/month',
56 | action: "https://api.leechersparadise.com/create-checkout-session",
57 | method: "POST",
58 | description: [
59 | 'All features',
60 | 'Unlimited Downloads',
61 | 'Unlimited File Sizes',
62 | 'Priority Discord Support',
63 | ],
64 | buttonText: 'Buy Here',
65 | buttonVariant: 'contained',
66 | },
67 | {
68 | title: 'Donate',
69 | subheader: 'Supports Us',
70 | link: 'donate',
71 | price: '♾',
72 | action: "donate",
73 | buttonid: "donatebutton",
74 | method: "GET",
75 | description: [
76 | 'Support LeechersParadise',
77 | 'Discord Perks',
78 | 'Your name in source code'
79 | ],
80 | buttonText: 'Support Here',
81 | buttonVariant: 'contained',
82 | },
83 | ];
84 | function PricingContent() {
85 | return (
86 |
87 |
88 |
89 |
90 |
97 | Premium
98 |
99 |
100 | Not only does this help support us by providing for our monthly costs but you also get perks by signing up for premium.
101 |
102 |
103 | If you would like to purchase premium using a different payment method such as crypto or paypal, please make a ticket in our Discord to begin the process.
104 |
105 |
106 | {/* End hero unit */}
107 |
108 |
109 | {tiers.map((tier) => (
110 | // Enterprise card is full width at sm breakpoint
111 |
118 |
119 | : null}
124 | subheaderTypographyProps={{
125 | align: 'center',
126 | }}
127 | sx={{
128 | backgroundColor: (theme) =>
129 | theme.palette.mode === 'light'
130 | ? theme.palette.grey[200]
131 | : theme.palette.grey[700],
132 | }}
133 | />
134 |
135 |
143 |
144 | {tier.price}
145 |
146 |
147 |
148 | {tier.description.map((line) => (
149 |
155 | {line}
156 |
157 | ))}
158 |
159 |
160 |
161 |
170 |
171 |
172 |
173 |
174 | ))}
175 |
176 |
177 |
178 | );
179 | }
180 | export default function Premium() {
181 | return (
182 |
183 |
184 |
185 | )
186 | }
187 |
--------------------------------------------------------------------------------
/v2 (alpha)/frontend/src/pages/success.tsx:
--------------------------------------------------------------------------------
1 | import { createTheme, ThemeProvider} from '@mui/material/styles';
2 | import Box from '@mui/material/Box';
3 | import CssBaseline from '@mui/material/CssBaseline';
4 | import Typography from '@mui/material/Typography';
5 | import Container from '@mui/material/Container';
6 | const NewthemeDark = createTheme({
7 | palette: {
8 | mode: "dark",
9 | background: {
10 | default: "#333333"
11 | },
12 | primary: {
13 | main: '#5E2BE2',
14 | },
15 | secondary: {
16 | main: '#50c878',
17 | },
18 | text: {
19 | primary: "#ffffff"
20 | },
21 | },
22 | typography: {
23 | fontFamily: [
24 | 'Lato',
25 | 'sans-serif',
26 | ].join(','),
27 | },
28 | });
29 | export default function Success() {
30 | return (
31 |
32 |
33 |
34 |
35 | Purchase Success!
36 |
37 |
38 |
39 | We have successfully purchased your premium order!
40 | Please check the email you used to purchase for your credentials. If there is something wrong with your purchase please email: contact@leechersparadise.com for help, or message a dev at our Discord: Here .
41 | We hope you use your account well, and enjoy the benefits that come with having premium!
42 | Thank you again for supporting LeechersParadise!
43 | -Love, The Devs
44 | You may now log in using your credentials Here , or just return to the main page, Here .
45 |
46 |
47 |
48 |
49 |
50 | )
51 | }
--------------------------------------------------------------------------------
/v2 (alpha)/frontend/src/pages/userpanel.tsx:
--------------------------------------------------------------------------------
1 | import * as React from "react";
2 | import Avatar from "@mui/material/Avatar";
3 | import Button from "@mui/material/Button";
4 | import CssBaseline from "@mui/material/CssBaseline";
5 | import TextField from "@mui/material/TextField";
6 | import FormControlLabel from "@mui/material/FormControlLabel";
7 | import Checkbox from "@mui/material/Checkbox";
8 | import { Link } from "react-router-dom";
9 | import Grid from "@mui/material/Grid";
10 | import Box from "@mui/material/Box";
11 | import LockOutlinedIcon from "@mui/icons-material/LockOutlined";
12 | import Typography from "@mui/material/Typography";
13 | import Container from "@mui/material/Container";
14 | import Tooltip from "@mui/material/Tooltip";
15 | import ClickAwayListener from "@mui/material/ClickAwayListener";
16 | import { createTheme, ThemeProvider } from "@mui/material/styles";
17 | import { collection, query, where, getDocs } from "firebase/firestore";
18 | import { signInWithEmailAndPassword } from "@firebase/auth";
19 | import { fireAuth } from "../config/firebase.config";
20 | import { useAuthUser } from "../hooks/AuthUser";
21 | import { fireStore } from "../config/firebase.config";
22 | import PersonOutline from "@mui/icons-material/PersonOutline";
23 | const NewthemeDark = createTheme({
24 | palette: {
25 | mode: "dark",
26 | background: {
27 | default: "#333333",
28 | },
29 | primary: {
30 | main: "#5E2BE2",
31 | },
32 | secondary: {
33 | main: "#50c878",
34 | },
35 | text: {
36 | primary: "#ffffff",
37 | },
38 | },
39 | typography: {
40 | fontFamily: ["Lato", "sans-serif"].join(","),
41 | },
42 | });
43 | function Copyright(props: any) {
44 | return (
45 |
51 | {""}
52 |
53 | LeechersParadise
54 | {" "}
55 | {new Date().getFullYear()}
56 | {" - Present"}
57 |
58 | );
59 | }
60 | export default function UserPanel() {
61 | const [open, setOpen] = React.useState(false);
62 | const [customer, setCustomer] = React.useState("");
63 | const user = useAuthUser();
64 | const handleTooltipClose = () => {
65 | setOpen(false);
66 | };
67 | async function handleCustomer(email) {
68 | const q = query(
69 | collection(fireStore, "users"),
70 | where("email", "==", email)
71 | );
72 | const querySnapshot = await getDocs(q);
73 | querySnapshot.forEach((doc) => {
74 | // doc.data() is never undefined for query doc snapshots
75 | const data = doc.data();
76 | const customer = data.customer as string;
77 | setCustomer(customer);
78 | });
79 | }
80 | const handleSubmit = (event: React.FormEvent) => {
81 | const data = new FormData(event.currentTarget);
82 | const user = data.get("user") as string;
83 | const password = data.get("password") as string;
84 | signInWithEmailAndPassword(fireAuth, user, password).catch((error) => {
85 | setOpen(true);
86 | });
87 | event.preventDefault();
88 | };
89 | if (user) {
90 | const email = user.email;
91 | handleCustomer(email);
92 | return (
93 |
94 |
95 |
96 |
104 |
105 |
106 |
107 |
108 | Welcome to LeechersParadise:
109 |
110 |
120 |
121 |
129 |
147 |
148 |
156 |
157 | Change Email
158 |
159 |
160 |
161 |
162 | );
163 | } else {
164 | return (
165 |
166 |
167 |
168 |
169 |
177 |
178 |
179 |
180 |
181 | Sign In
182 |
183 |
189 |
198 |
207 | }
209 | label="Remember me"
210 | />
211 |
222 |
228 | Sign In
229 |
230 |
231 |
232 |
233 |
234 | Forgot password?
235 |
236 |
237 |
238 |
239 |
240 |
241 |
242 |
243 |
244 | );
245 | }
246 | }
247 |
--------------------------------------------------------------------------------
/v2 (alpha)/frontend/src/react-app-env.d.ts:
--------------------------------------------------------------------------------
1 | ///
2 | ///
3 | ///
4 | ///
5 |
6 | declare namespace NodeJS {
7 | interface ProcessEnv {
8 | readonly NODE_ENV: "development" | "production" | "test";
9 | readonly PUBLIC_URL: string;
10 | }
11 | }
12 |
13 | declare module "*.avif" {
14 | const src: string;
15 | export default src;
16 | }
17 |
18 | declare module "*.bmp" {
19 | const src: string;
20 | export default src;
21 | }
22 |
23 | declare module "*.gif" {
24 | const src: string;
25 | export default src;
26 | }
27 |
28 | declare module "*.jpg" {
29 | const src: string;
30 | export default src;
31 | }
32 |
33 | declare module "*.jpeg" {
34 | const src: string;
35 | export default src;
36 | }
37 |
38 | declare module "*.png" {
39 | const src: string;
40 | export default src;
41 | }
42 |
43 | declare module "*.webp" {
44 | const src: string;
45 | export default src;
46 | }
47 |
48 | declare module "*.svg" {
49 | import * as React from "react";
50 |
51 | export const ReactComponent: React.FunctionComponent<
52 | React.SVGProps & { title?: string }
53 | >;
54 |
55 | const src: string;
56 | export default src;
57 | }
58 |
59 | declare module "*.module.css" {
60 | const classes: { readonly [key: string]: string };
61 | export default classes;
62 | }
63 |
64 | declare module "*.module.scss" {
65 | const classes: { readonly [key: string]: string };
66 | export default classes;
67 | }
68 |
69 | declare module "*.module.sass" {
70 | const classes: { readonly [key: string]: string };
71 | export default classes;
72 | }
73 |
--------------------------------------------------------------------------------
/v2 (alpha)/frontend/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "compilerOptions": {
3 | "target": "es2017",
4 | "lib": [
5 | "dom",
6 | "dom.iterable",
7 | "esnext"
8 | ],
9 | "allowJs": true,
10 | "skipLibCheck": true,
11 | "esModuleInterop": true,
12 | "allowSyntheticDefaultImports": true,
13 | "strict": true,
14 | "forceConsistentCasingInFileNames": true,
15 | "noFallthroughCasesInSwitch": true,
16 | "module": "esnext",
17 | "moduleResolution": "node",
18 | "resolveJsonModule": true,
19 | "isolatedModules": true,
20 | "noEmit": true,
21 | "jsx": "react-jsx",
22 | "noImplicitReturns": true,
23 | "noImplicitAny": false
24 |
25 | },
26 | "include": [
27 | "src"
28 | ]
29 | }
30 |
--------------------------------------------------------------------------------
/v3 (realdebrid)/backend/.dockerignore:
--------------------------------------------------------------------------------
1 | node_modules
2 | npm-debug.log
--------------------------------------------------------------------------------
/v3 (realdebrid)/backend/.gitignore:
--------------------------------------------------------------------------------
1 | # Logs
2 | logs
3 | *.log
4 | npm-debug.log*
5 | yarn-debug.log*
6 | yarn-error.log*
7 | lerna-debug.log*
8 | .pnpm-debug.log*
9 |
10 | # Diagnostic reports (https://nodejs.org/api/report.html)
11 | report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json
12 |
13 | # Runtime data
14 | pids
15 | *.pid
16 | *.seed
17 | *.pid.lock
18 |
19 | # Directory for instrumented libs generated by jscoverage/JSCover
20 | lib-cov
21 |
22 | # Coverage directory used by tools like istanbul
23 | coverage
24 | *.lcov
25 |
26 | # nyc test coverage
27 | .nyc_output
28 |
29 | # Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files)
30 | .grunt
31 |
32 | # Bower dependency directory (https://bower.io/)
33 | bower_components
34 |
35 | # node-waf configuration
36 | .lock-wscript
37 |
38 | # Compiled binary addons (https://nodejs.org/api/addons.html)
39 | build/Release
40 |
41 | # Dependency directories
42 | node_modules/
43 | jspm_packages/
44 |
45 | # Snowpack dependency directory (https://snowpack.dev/)
46 | web_modules/
47 |
48 | # TypeScript cache
49 | *.tsbuildinfo
50 |
51 | # Optional npm cache directory
52 | .npm
53 |
54 | # Optional eslint cache
55 | .eslintcache
56 |
57 | # Optional stylelint cache
58 | .stylelintcache
59 |
60 | # Microbundle cache
61 | .rpt2_cache/
62 | .rts2_cache_cjs/
63 | .rts2_cache_es/
64 | .rts2_cache_umd/
65 |
66 | # Optional REPL history
67 | .node_repl_history
68 |
69 | # Output of 'npm pack'
70 | *.tgz
71 |
72 | # Yarn Integrity file
73 | .yarn-integrity
74 |
75 | # dotenv environment variable files
76 | .env
77 | .env.development.local
78 | .env.test.local
79 | .env.production.local
80 | .env.local
81 |
82 | # parcel-bundler cache (https://parceljs.org/)
83 | .cache
84 | .parcel-cache
85 |
86 | # Next.js build output
87 | .next
88 | out
89 |
90 | # Nuxt.js build / generate output
91 | .nuxt
92 | dist
93 |
94 | # Gatsby files
95 | .cache/
96 | # Comment in the public line in if your project uses Gatsby and not Next.js
97 | # https://nextjs.org/blog/next-9-1#public-directory-support
98 | # public
99 |
100 | # vuepress build output
101 | .vuepress/dist
102 |
103 | # vuepress v2.x temp and cache directory
104 | .temp
105 | .cache
106 |
107 | # Docusaurus cache and generated files
108 | .docusaurus
109 |
110 | # Serverless directories
111 | .serverless/
112 |
113 | # FuseBox cache
114 | .fusebox/
115 |
116 | # DynamoDB Local files
117 | .dynamodb/
118 |
119 | # TernJS port file
120 | .tern-port
121 |
122 | # Stores VSCode versions used for testing VSCode extensions
123 | .vscode-test
124 |
125 | # yarn v2
126 | .yarn/cache
127 | .yarn/unplugged
128 | .yarn/build-state.yml
129 | .yarn/install-state.gz
130 | .pnp.*
--------------------------------------------------------------------------------
/v3 (realdebrid)/backend/dockerfile:
--------------------------------------------------------------------------------
1 | FROM node:16
2 | WORKDIR /usr/src/app
3 | COPY package*.json ./
4 | RUN npm install --omit=dev
5 | ENV APITOKEN=TOKEN
6 | COPY . .
7 | EXPOSE 3001
8 | CMD [ "node", "src/index.js" ]
9 |
--------------------------------------------------------------------------------
/v3 (realdebrid)/backend/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "backend",
3 | "version": "1.0.0",
4 | "description": "",
5 | "main": "index.js",
6 | "homepage": ".",
7 | "scripts": {
8 | "dev": "nodemon src/index.js",
9 | "devv": "node src/index.js",
10 | "start": "node src/index.js NODE_ENV=production node"
11 | },
12 | "author": "",
13 | "license": "ISC",
14 | "dependencies": {
15 | "all-debrid-api": "^1.1.0",
16 | "axios": "^0.27.2",
17 | "body-parser": "^1.20.0",
18 | "compression": "^1.7.4",
19 | "cors": "^2.8.5",
20 | "dotenv": "^16.0.0",
21 | "download": "^8.0.0",
22 | "express": "^4.17.3",
23 | "express-http-proxy": "^1.6.3",
24 | "express-queue": "^0.0.13",
25 | "express-rate-limit": "^6.4.0",
26 | "firebase": "^9.6.10",
27 | "firebase-admin": "^11.0.1",
28 | "got": "^12.1.0",
29 | "helmet": "^5.1.0",
30 | "morgan": "^1.10.0",
31 | "mysql": "^2.18.1",
32 | "node-real-debrid": "^1.0.6",
33 | "nodemailer": "^6.7.5",
34 | "nodemon": "^2.0.15",
35 | "rate-limit-mongo": "^2.3.2",
36 | "rate-limit-redis": "^3.0.1",
37 | "real-debrid-api": "^1.1.0",
38 | "redis": "^4.3.0",
39 | "request-ip": "^2.2.0",
40 | "sqlite3": "^5.0.8",
41 | "stripe": "^9.0.0",
42 | "ts-node": "^10.8.0"
43 | },
44 | "devDependencies": {
45 | "http-proxy-middleware": "^2.0.6"
46 | }
47 | }
48 |
--------------------------------------------------------------------------------
/v3 (realdebrid)/backend/src/config/admin.json:
--------------------------------------------------------------------------------
1 | {
2 |
3 | }
4 |
--------------------------------------------------------------------------------
/v3 (realdebrid)/backend/src/config/firebase.config.js:
--------------------------------------------------------------------------------
1 | const {initializeApp} = require('firebase/app')
2 | const firebaseConfig = {
3 | apiKey: process.env.apiKey,
4 | authDomain: process.env.authDomain,
5 | projectId: process.env.projectId,
6 | storageBucket: process.env.storageBucket,
7 | messagingSenderId: process.env.messagingSenderId,
8 | appId: process.env.appId,
9 | measurementId: process.env.measurementId,
10 | }
11 | function createFirebaseApp(config) {
12 | const firebaseApp = initializeApp(config)
13 | return firebaseApp
14 | }
15 |
16 | const firebaseApp = createFirebaseApp(firebaseConfig)
17 | module.exports = {
18 | firebaseApp
19 | }
--------------------------------------------------------------------------------
/v3 (realdebrid)/backend/src/config/firebaseadmin.config.js:
--------------------------------------------------------------------------------
1 | var admin = require("firebase-admin");
2 | var serviceAccount = require("./admin.json");
3 | function createFirebaseAdmin() {
4 | const firebaseAdmin = admin.initializeApp({
5 | credential: admin.credential.cert(serviceAccount)
6 | });
7 | }
8 | const firebaseAdmin = createFirebaseAdmin()
9 | module.exports = {
10 | firebaseAdmin
11 | }
--------------------------------------------------------------------------------
/v3 (realdebrid)/frontend/.gitignore:
--------------------------------------------------------------------------------
1 | # See https://help.github.com/articles/ignoring-files/ for more about ignoring files.
2 |
3 | # dependencies
4 | /node_modules
5 | /.pnp
6 | .pnp.js
7 |
8 | # testing
9 | /coverage
10 |
11 | # production
12 | /build
13 |
14 | # misc
15 | .DS_Store
16 | .env.local
17 | .env.development.local
18 | .env.test.local
19 | .env.production.local
20 |
21 | npm-debug.log*
22 | yarn-debug.log*
23 | yarn-error.log*
24 |
--------------------------------------------------------------------------------
/v3 (realdebrid)/frontend/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "my-app",
3 | "version": "0.1.0",
4 | "private": true,
5 | "dependencies": {
6 | "@ctrl/react-adsense": "^1.6.0",
7 | "@emotion/react": "^11.8.2",
8 | "@emotion/styled": "^11.8.1",
9 | "@fontsource/roboto": "^4.5.3",
10 | "@material-ui/icons": "^4.11.3",
11 | "@material-ui/lab": "^4.0.0-alpha.60",
12 | "@material/top-app-bar": "^13.0.0",
13 | "@mui/icons-material": "^5.5.1",
14 | "@mui/lab": "^5.0.0-alpha.75",
15 | "@mui/material": "^5.5.1",
16 | "@mui/styles": "^5.8.6",
17 | "@types/jest": "^27.4.1",
18 | "@types/react": "^17.0.41",
19 | "@types/react-dom": "^17.0.14",
20 | "chalk": "^5.0.1",
21 | "chalk-animation": "^2.0.2",
22 | "file-saver": "^2.0.5",
23 | "firebase": "^9.8.1",
24 | "react": "^17.0.2",
25 | "react-copy-to-clipboard": "^5.1.0",
26 | "react-device-detect": "^2.2.2",
27 | "react-dom": "^17.0.2",
28 | "react-router-dom": "^6.3.0",
29 | "react-scripts": "^5.0.0",
30 | "serve": "^13.0.2",
31 | "terminal-link": "^3.0.0",
32 | "typescript": "^4.6.2"
33 | },
34 | "scripts": {
35 | "start": "react-scripts start",
36 | "build": "react-scripts build",
37 | "test": "react-scripts test",
38 | "eject": "react-scripts eject"
39 | },
40 | "eslintConfig": {
41 | "extends": [
42 | "react-app",
43 | "react-app/jest"
44 | ]
45 | },
46 | "browserslist": {
47 | "production": [
48 | ">0.2%",
49 | "not dead",
50 | "not op_mini all"
51 | ],
52 | "development": [
53 | "last 1 chrome version",
54 | "last 1 firefox version",
55 | "last 1 safari version"
56 | ]
57 | },
58 | "devDependencies": {
59 | "@types/node": "^18.0.1"
60 | }
61 | }
62 |
--------------------------------------------------------------------------------
/v3 (realdebrid)/frontend/public/android-chrome-192x192.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Wamy-Dev/LeechersParadise/ab9d6493f7e39995c6b84fd54e7b9bcc75a3246e/v3 (realdebrid)/frontend/public/android-chrome-192x192.png
--------------------------------------------------------------------------------
/v3 (realdebrid)/frontend/public/android-chrome-512x512.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Wamy-Dev/LeechersParadise/ab9d6493f7e39995c6b84fd54e7b9bcc75a3246e/v3 (realdebrid)/frontend/public/android-chrome-512x512.png
--------------------------------------------------------------------------------
/v3 (realdebrid)/frontend/public/apple-touch-icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Wamy-Dev/LeechersParadise/ab9d6493f7e39995c6b84fd54e7b9bcc75a3246e/v3 (realdebrid)/frontend/public/apple-touch-icon.png
--------------------------------------------------------------------------------
/v3 (realdebrid)/frontend/public/browserconfig.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | #da532c
7 |
8 |
9 |
10 |
--------------------------------------------------------------------------------
/v3 (realdebrid)/frontend/public/favicon-16x16.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Wamy-Dev/LeechersParadise/ab9d6493f7e39995c6b84fd54e7b9bcc75a3246e/v3 (realdebrid)/frontend/public/favicon-16x16.png
--------------------------------------------------------------------------------
/v3 (realdebrid)/frontend/public/favicon-32x32.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Wamy-Dev/LeechersParadise/ab9d6493f7e39995c6b84fd54e7b9bcc75a3246e/v3 (realdebrid)/frontend/public/favicon-32x32.png
--------------------------------------------------------------------------------
/v3 (realdebrid)/frontend/public/favicon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Wamy-Dev/LeechersParadise/ab9d6493f7e39995c6b84fd54e7b9bcc75a3246e/v3 (realdebrid)/frontend/public/favicon.ico
--------------------------------------------------------------------------------
/v3 (realdebrid)/frontend/public/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
21 | Leechers Paradise
22 |
23 |
24 | You need to enable JavaScript to run this app.
25 |
28 |
29 |
30 |
--------------------------------------------------------------------------------
/v3 (realdebrid)/frontend/public/mstile-150x150.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Wamy-Dev/LeechersParadise/ab9d6493f7e39995c6b84fd54e7b9bcc75a3246e/v3 (realdebrid)/frontend/public/mstile-150x150.png
--------------------------------------------------------------------------------
/v3 (realdebrid)/frontend/public/robots.txt:
--------------------------------------------------------------------------------
1 | # https://www.robotstxt.org/robotstxt.html
2 | User-agent: *
3 | Disallow:
4 |
--------------------------------------------------------------------------------
/v3 (realdebrid)/frontend/public/site.webmanifest:
--------------------------------------------------------------------------------
1 | {
2 | "name": "Leechers Paradise",
3 | "short_name": "Leechers Paradise",
4 | "icons": [
5 | {
6 | "src": "/android-chrome-192x192.png",
7 | "sizes": "192x192",
8 | "type": "image/png"
9 | },
10 | {
11 | "src": "/android-chrome-512x512.png",
12 | "sizes": "512x512",
13 | "type": "image/png"
14 | }
15 | ],
16 | "theme_color": "#ffffff",
17 | "background_color": "#ffffff",
18 | "display": "standalone"
19 | }
20 |
--------------------------------------------------------------------------------
/v3 (realdebrid)/frontend/src/apis/admin-panel.api.js:
--------------------------------------------------------------------------------
1 | export async function saveAdminPanel(formState) {
2 | return await fetch('https://api.leechersparadise.com/admin', {
3 | method: 'POST', // or 'PUT'
4 | headers: {
5 | 'Content-Type': 'application/json',
6 | },
7 | body: JSON.stringify(formState),
8 | })
9 | }
10 | export async function getAdminPanel() {
11 | return await fetch('https://api.leechersparadise.com/admin', {
12 | method: 'GET', // or 'PUT'
13 | headers: {
14 | 'Content-Type': 'application/json',
15 | }
16 | })
17 | }
--------------------------------------------------------------------------------
/v3 (realdebrid)/frontend/src/app.tsx:
--------------------------------------------------------------------------------
1 | import {
2 | BrowserRouter as Router,
3 | Routes,
4 | Route
5 | } from "react-router-dom";
6 | import Main from "./components/main";
7 | import AdminPanel from "./pages/admin-panel";
8 | import About from "./pages/about";
9 | import ButtonAppBar from "./components/topnav";
10 | import UserPanel from "./pages/userpanel";
11 | import Premium from "./pages/premium";
12 | import Donate from "./pages/donate";
13 | import NotFound from "./pages/404";
14 | import Success from "./pages/success"
15 | import Forgot from "./pages/forgot"
16 | import Torrent from "./pages/torrent"
17 | import ChangeEmail from './pages/changeemail'
18 | export default function App() {
19 | return (
20 |
21 |
22 |
23 | {/*A looks through its children s and
24 | renders the first one that matches the current URL.*/}
25 |
26 | } />
27 | } />
28 | } />
29 | } />
30 | } />
31 | } />
32 | } />
33 | } />
34 | } />
35 | } />
36 | } />
37 |
38 |
39 |
40 | );
41 | }
42 |
--------------------------------------------------------------------------------
/v3 (realdebrid)/frontend/src/components/assets/piracy_logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Wamy-Dev/LeechersParadise/ab9d6493f7e39995c6b84fd54e7b9bcc75a3246e/v3 (realdebrid)/frontend/src/components/assets/piracy_logo.png
--------------------------------------------------------------------------------
/v3 (realdebrid)/frontend/src/components/assets/piracy_logo.png.bk:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Wamy-Dev/LeechersParadise/ab9d6493f7e39995c6b84fd54e7b9bcc75a3246e/v3 (realdebrid)/frontend/src/components/assets/piracy_logo.png.bk
--------------------------------------------------------------------------------
/v3 (realdebrid)/frontend/src/components/assets/premium.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Wamy-Dev/LeechersParadise/ab9d6493f7e39995c6b84fd54e7b9bcc75a3246e/v3 (realdebrid)/frontend/src/components/assets/premium.png
--------------------------------------------------------------------------------
/v3 (realdebrid)/frontend/src/components/assets/premium.png.bk:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Wamy-Dev/LeechersParadise/ab9d6493f7e39995c6b84fd54e7b9bcc75a3246e/v3 (realdebrid)/frontend/src/components/assets/premium.png.bk
--------------------------------------------------------------------------------
/v3 (realdebrid)/frontend/src/components/topnav.tsx:
--------------------------------------------------------------------------------
1 | import * as React from 'react';
2 | import AppBar from '@mui/material/AppBar';
3 | import Box from '@mui/material/Box';
4 | import Toolbar from '@mui/material/Toolbar';
5 | import Typography from '@mui/material/Typography';
6 | import Button from '@mui/material/Button';
7 | import IconButton from '@mui/material/IconButton';
8 | import MenuIcon from '@mui/icons-material/Menu';
9 | import Menu from '@mui/material/Menu';
10 | import MenuItem from '@mui/material/MenuItem';
11 | import Fade from '@mui/material/Fade';
12 | import { Link } from 'react-router-dom'
13 | import { createTheme, ThemeProvider } from '@mui/material/styles';
14 | import { useAuthUser } from '../hooks/AuthUser';
15 | import { signOut } from 'firebase/auth';
16 | import { fireAuth } from '../config/firebase.config';
17 | import { Logout } from '@mui/icons-material';
18 | const NewthemeDark = createTheme({
19 | palette: {
20 | mode: "dark",
21 | background: {
22 | default: "#333333"
23 | },
24 | primary: {
25 | main: '#5E2BE2',
26 | },
27 | secondary: {
28 | main: '#50c878',
29 | },
30 | text: {
31 | primary: "#ffffff"
32 | },
33 | },
34 | typography: {
35 | fontFamily: [
36 | 'Lato',
37 | 'sans-serif',
38 | ].join(','),
39 | },
40 | });
41 |
42 | export default function ButtonAppBar() {
43 | const [anchorEl, setAnchorEl] = React.useState(null);
44 | const user = useAuthUser()
45 | const open = Boolean(anchorEl);
46 | const handleClick = (event: React.MouseEvent) => {
47 | setAnchorEl(event.currentTarget);
48 | };
49 | const handleClose = () => {
50 | setAnchorEl(null);
51 | };
52 |
53 | const logout = () => {
54 | signOut(fireAuth)
55 | }
56 | return (
57 | <>
58 |
59 |
60 |
61 |
62 |
70 |
71 |
72 |
73 |
74 |
77 | {user ? user?.email : 'User Panel'}
78 | {user &&
79 |
84 | }
85 |
86 |
87 |
88 |
89 |
90 |
109 |
110 | >
111 | );
112 | }
113 |
--------------------------------------------------------------------------------
/v3 (realdebrid)/frontend/src/config/firebase.config.tsx:
--------------------------------------------------------------------------------
1 | import { FirebaseOptions, getApps, getApp, initializeApp } from 'firebase/app'
2 | import { getAnalytics } from 'firebase/analytics'
3 | import { getAuth, User } from 'firebase/auth'
4 | import { getFirestore } from '@firebase/firestore'
5 | import { getStorage } from '@firebase/storage'
6 | const firebaseConfig = {
7 | apiKey: "AIzaSyBLXAgU_JHdFL-6Nfj-MOiPHE4AH7WLElY",
8 | authDomain: process.env.authDomain,
9 | projectId: "leechersparadise",
10 | storageBucket: process.env.storageBucket,
11 | messagingSenderId: process.env.messagingSenderId,
12 | appId: "1:563386738993:web:6dd3c250a078c9ae766810",
13 | measurementId: process.env.measurementId,
14 | }
15 | function createFirebaseApp(config: FirebaseOptions) {
16 | if (!getApps.length) {
17 | const firebaseApp = initializeApp(config)
18 | if (typeof window !== 'undefined') {
19 | if ('measurementId' in firebaseConfig) {
20 | getAnalytics()
21 | }
22 | return firebaseApp
23 | }
24 | return firebaseApp
25 | } else {
26 | return getApp()
27 | }
28 | }
29 | const firebaseApp = createFirebaseApp(firebaseConfig)
30 | export const fireAuth = getAuth(firebaseApp)
31 | export const fireStore = getFirestore(firebaseApp)
32 | export const fireStorage = getStorage(firebaseApp)
33 | export const auth = {
34 | currentUser: null as (User | null),
35 | token : ''
36 | }
--------------------------------------------------------------------------------
/v3 (realdebrid)/frontend/src/hooks/AuthUser.tsx:
--------------------------------------------------------------------------------
1 | import {useEffect, useState } from "react";
2 | import {auth, fireAuth } from "../config/firebase.config";
3 |
4 | export function useAuthUser(): user | null {
5 | const [currentUser, setCurrentUser] = useState(null);
6 |
7 | function handleStatusChange(user) {
8 | setCurrentUser(user);
9 | }
10 |
11 | useEffect(() => {
12 | fireAuth.onAuthStateChanged((user) => {
13 | user?.getIdToken().then((token) => {
14 | auth.token = token
15 | })
16 | auth.currentUser = user
17 | handleStatusChange(user)
18 | })
19 | });
20 |
21 | return currentUser;
22 | }
23 |
24 | export interface user {
25 | email: string
26 | }
--------------------------------------------------------------------------------
/v3 (realdebrid)/frontend/src/index.tsx:
--------------------------------------------------------------------------------
1 | import ReactDOM from 'react-dom';
2 | import App from "./app";
3 | ReactDOM.render( , document.getElementsByClassName('root')[0]);
4 | console.log('%cThanks to these people for making this project possible: Sineater, Tsun, SCArkadia, and all of our premium subscribers.', "color: #5c2ce2; font-size: large;")
5 | console.log('Donate at https://leechersparadise.com/donate to get your name here!')
6 |
--------------------------------------------------------------------------------
/v3 (realdebrid)/frontend/src/pages/404.tsx:
--------------------------------------------------------------------------------
1 | import { createTheme, ThemeProvider} from '@mui/material/styles';
2 | import Box from '@mui/material/Box';
3 | import CssBaseline from '@mui/material/CssBaseline';
4 | import { Link } from 'react-router-dom'
5 |
6 |
7 | const NewthemeDark = createTheme({
8 | palette: {
9 | mode: "dark",
10 | background: {
11 | default: "#333333"
12 | },
13 | primary: {
14 | main: '#5E2BE2',
15 | },
16 | secondary: {
17 | main: '#50c878',
18 | },
19 | text: {
20 | primary: "#ffffff"
21 | },
22 | },
23 | typography: {
24 | fontFamily: [
25 | 'Lato',
26 | 'sans-serif',
27 | ].join(','),
28 | },
29 | });
30 | export default function NotFound() {
31 | return (
32 |
33 |
34 |
35 |
36 |
404, you aren't supposed to be here...
37 | Lets take you back to the main page.
38 |
39 |
40 |
41 |
42 | )
43 | }
--------------------------------------------------------------------------------
/v3 (realdebrid)/frontend/src/pages/admin-panel.jsx:
--------------------------------------------------------------------------------
1 | import {
2 | Alert,
3 | Card,
4 | CardContent,
5 | CardHeader,
6 | TextField
7 | } from "@mui/material";
8 | import Container from "@mui/material/Container";
9 | import Button from "@mui/material/Button";
10 | import Grid from "@mui/material/Grid";
11 | import Box from "@mui/material/Box";
12 | import {Link} from "react-router-dom";
13 | import HomeIcon from '@mui/icons-material/Home'
14 | import {useState, useEffect} from "react";
15 | import Snackbar from '@mui/material/Snackbar';
16 | import { createMuiTheme, ThemeProvider} from '@mui/material/styles';
17 | import CssBaseline from '@mui/material/CssBaseline';
18 | import {saveAdminPanel, getAdminPanel} from "../apis/admin-panel.api";
19 | export default function AdminPanel() {
20 | const [formState, setFormState] = useState({dollarvalue: '', dollargoal: ''});
21 | const [alert, setAlert] = useState({message: '', severity: ''});
22 | const [open, setOpen] = useState(false);
23 | const handleClose = (event, reason) => {
24 | if (reason === 'clickaway') {
25 | return;
26 | }
27 | setOpen(false);
28 | };
29 | async function save(event) {
30 | event.preventDefault()
31 | try {
32 | const result = await saveAdminPanel(formState)
33 | if (result.status !== 200) throw 'Error'
34 | setAlert({message: 'Success! Added values to the donation bar.', severity: 'success'});
35 | setOpen(true)
36 | } catch(ex) {
37 | setAlert({message: 'Failure! Something went wrong.', severity:'error'});
38 | setOpen(true)
39 | }
40 | }
41 | useEffect(async () => {
42 | const response = await getAdminPanel();
43 | const result = await response.json()
44 | setFormState({dollargoal: result.dollarGoal, dollarvalue: result.dollarValue})
45 | },[])
46 | const NewthemeDark = createMuiTheme({
47 | palette: {
48 | mode: "dark",
49 | background: {
50 | default: "#333333"
51 | },
52 | primary: {
53 | main: '#5E2BE2',
54 | },
55 | secondary: {
56 | main: '#50c878',
57 | },
58 | text: {
59 | primary: "#ffffff"
60 | },
61 | },
62 | typography: {
63 | fontFamily: [
64 | 'Lato',
65 | 'sans-serif',
66 | ].join(','),
67 | },
68 | });
69 | return (
70 |
71 |
72 |
73 |
74 |
75 |
76 |
77 |
82 |
83 |
84 |
85 |
122 |
123 |
124 |
125 |
126 |
127 | {alert.message}
128 |
129 |
130 |
131 |
132 |
133 |
134 | )
135 | }
--------------------------------------------------------------------------------
/v3 (realdebrid)/frontend/src/pages/assets/bitcoin.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Wamy-Dev/LeechersParadise/ab9d6493f7e39995c6b84fd54e7b9bcc75a3246e/v3 (realdebrid)/frontend/src/pages/assets/bitcoin.png
--------------------------------------------------------------------------------
/v3 (realdebrid)/frontend/src/pages/assets/etherium.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Wamy-Dev/LeechersParadise/ab9d6493f7e39995c6b84fd54e7b9bcc75a3246e/v3 (realdebrid)/frontend/src/pages/assets/etherium.png
--------------------------------------------------------------------------------
/v3 (realdebrid)/frontend/src/pages/assets/monero.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Wamy-Dev/LeechersParadise/ab9d6493f7e39995c6b84fd54e7b9bcc75a3246e/v3 (realdebrid)/frontend/src/pages/assets/monero.png
--------------------------------------------------------------------------------
/v3 (realdebrid)/frontend/src/pages/assets/piracy_logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Wamy-Dev/LeechersParadise/ab9d6493f7e39995c6b84fd54e7b9bcc75a3246e/v3 (realdebrid)/frontend/src/pages/assets/piracy_logo.png
--------------------------------------------------------------------------------
/v3 (realdebrid)/frontend/src/pages/assets/premium.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Wamy-Dev/LeechersParadise/ab9d6493f7e39995c6b84fd54e7b9bcc75a3246e/v3 (realdebrid)/frontend/src/pages/assets/premium.png
--------------------------------------------------------------------------------
/v3 (realdebrid)/frontend/src/pages/assets/wamy.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Wamy-Dev/LeechersParadise/ab9d6493f7e39995c6b84fd54e7b9bcc75a3246e/v3 (realdebrid)/frontend/src/pages/assets/wamy.png
--------------------------------------------------------------------------------
/v3 (realdebrid)/frontend/src/pages/donate.tsx:
--------------------------------------------------------------------------------
1 | import { createTheme, ThemeProvider} from '@mui/material/styles';
2 | import Box from '@mui/material/Box';
3 | import CssBaseline from '@mui/material/CssBaseline';
4 | import Button from '@mui/material/Button';
5 | import Divider from '@mui/material/Divider';
6 | import { Link } from 'react-router-dom'
7 | import Monero from './assets/monero.png';
8 | import Bitcoin from './assets/bitcoin.png';
9 | import Etherium from './assets/etherium.png';
10 | import cocodahog from './assets/cocodahog.png';
11 | import wamy from './assets/wamy.png';
12 | import mocrosoft from './assets/mocrosoft.png';
13 | import {CopyToClipboard} from 'react-copy-to-clipboard';
14 | import { BrowserView } from 'react-device-detect';
15 |
16 | const NewthemeDark = createTheme({
17 | palette: {
18 | mode: "dark",
19 | background: {
20 | default: "#333333"
21 | },
22 | primary: {
23 | main: '#5E2BE2',
24 | },
25 | secondary: {
26 | main: '#50c878',
27 | },
28 | text: {
29 | primary: "#ffffff"
30 | },
31 | },
32 | typography: {
33 | fontFamily: [
34 | 'Lato',
35 | 'sans-serif',
36 | ].join(','),
37 | },
38 | });
39 | export default function About() {
40 | return (
41 |
42 |
43 |
44 |
45 |
46 |
Support LeechersParadise
47 |
48 |
49 |
Hi!
50 |
Thank you for considering to support our project.
51 |
If you enjoy this service, donate today, so we can use 100% of your support to further develop this project.
52 |
53 |
54 |
55 |
You can choose to support us via any of these options.
56 |
57 |
Monero
58 |
59 |
60 | 46XuKBQPLjrfdoKB7oXRyo2dZETJFF7xmSparT7iLjSJ14KohnyCKVeTzo7sdC2A8HUty9PHQyUjpJkhGm9kLVc4HhUjE6q
61 |
62 |
63 | Copy XMR Address
65 |
66 |
67 |
Bitcoin
68 |
69 |
70 | bc1q9x28smqehp4semejjkfs2slr8gugej0fpw5rdx
71 |
72 |
73 | Copy BTC Address
75 |
76 |
77 |
Etherium
78 |
79 |
80 | 0xe4E96A7833c1A43187A88870566a83e37386BA25
81 |
82 |
83 | Copy ETH Address
87 |
88 |
89 |
PayPal
90 |
91 |
92 |
93 |
If you don't like crypto, PayPal is an option.
94 |
95 |
99 | Donate using PayPal
100 |
101 |
102 |
103 |
This project is run off of RealDebrid . If you would like to support LeechersParadise, you may also sign up for the service that LeechersParadise relies on.
104 |
LeechersParadise will get commission when you sign up using our link.
105 |
106 |
107 |
108 |
109 |
110 |
If you have any questions or problems should occur, please contact contact@leechersparadise.com or message us on our Discord: Here .
111 |
Don't want to donate but still want to support our cause? Then you should consider signing up to premium.
112 |
113 |
114 |
115 |
116 | )
117 | }
--------------------------------------------------------------------------------
/v3 (realdebrid)/frontend/src/pages/forgot.tsx:
--------------------------------------------------------------------------------
1 | import { createTheme, ThemeProvider} from '@mui/material/styles';
2 | import Box from '@mui/material/Box';
3 | import CssBaseline from '@mui/material/CssBaseline';
4 | import ClickAwayListener from '@mui/material/ClickAwayListener';
5 | import * as React from 'react';
6 | import Tooltip from '@mui/material/Tooltip';
7 | import Button from '@mui/material/Button';
8 | import TextField from '@mui/material/TextField';
9 | import { sendPasswordResetEmail } from "firebase/auth";
10 | import { fireAuth } from '../config/firebase.config';
11 | import Container from '@mui/material/Container';
12 | import Dialog from '@mui/material/Dialog';
13 | import DialogActions from '@mui/material/DialogActions';
14 | import DialogContent from '@mui/material/DialogContent';
15 | import DialogContentText from '@mui/material/DialogContentText';
16 | import DialogTitle from '@mui/material/DialogTitle';
17 | import Slide from '@mui/material/Slide';
18 | import { TransitionProps } from '@mui/material/transitions';
19 | const NewthemeDark = createTheme({
20 | palette: {
21 | mode: "dark",
22 | background: {
23 | default: "#333333"
24 | },
25 | primary: {
26 | main: '#5E2BE2',
27 | },
28 | secondary: {
29 | main: '#50c878',
30 | },
31 | text: {
32 | primary: "#ffffff"
33 | },
34 | },
35 | typography: {
36 | fontFamily: [
37 | 'Lato',
38 | 'sans-serif',
39 | ].join(','),
40 | },
41 | });
42 | const Transition = React.forwardRef(function Transition(
43 | props: TransitionProps & {
44 | children: React.ReactElement;
45 | },
46 | ref: React.Ref,
47 | ) {
48 | return ;
49 | });
50 | export default function Forgot() {
51 | const [open, setOpen] = React.useState(false);
52 | const [dopen, setdOpen] = React.useState(false);
53 | const handleTooltipClose = () => {
54 | setOpen(false);
55 | };
56 | const handledClose = () => {
57 | setdOpen(false);
58 | };
59 | const handleSubmit = (event: React.FormEvent) => {
60 | event.preventDefault()
61 | const form = event.currentTarget
62 | const data = new FormData(event.currentTarget);
63 | const email = data.get('email') as string
64 | sendPasswordResetEmail(fireAuth, email)
65 | .then(() => {
66 | form.reset();
67 | setdOpen(true);
68 | })
69 | .catch(error => {
70 | setOpen(true);
71 | })
72 | }
73 | return (
74 |
75 |
76 |
77 |
78 |
79 |
80 |
Forgot Password
81 |
82 |
Here you can receive your password again. Please enter your email that you use to login, to get your password reset.
83 |
84 |
85 |
87 |
98 | Submit
99 |
100 |
107 | {"Password reset sent! 📬"}
108 |
109 |
110 | Please check your email for the reset link.
111 |
112 |
113 |
114 | Close
115 |
116 |
117 |
118 |
119 |
120 |
121 |
122 |
123 | )
124 | }
--------------------------------------------------------------------------------
/v3 (realdebrid)/frontend/src/pages/premium.tsx:
--------------------------------------------------------------------------------
1 | import * as React from 'react';
2 | import { createTheme, ThemeProvider} from '@mui/material/styles';
3 | import Box from '@mui/material/Box';
4 | import Button from '@mui/material/Button';
5 | import Card from '@mui/material/Card';
6 | import CardActions from '@mui/material/CardActions';
7 | import CardContent from '@mui/material/CardContent';
8 | import CardHeader from '@mui/material/CardHeader';
9 | import CssBaseline from '@mui/material/CssBaseline';
10 | import Grid from '@mui/material/Grid';
11 | import StarIcon from '@mui/icons-material/StarBorder';
12 | import Typography from '@mui/material/Typography';
13 | import GlobalStyles from '@mui/material/GlobalStyles';
14 | import Container from '@mui/material/Container';
15 | const NewthemeDark = createTheme({
16 | palette: {
17 | mode: "dark",
18 | background: {
19 | default: "#333333"
20 | },
21 | primary: {
22 | main: '#5E2BE2',
23 | },
24 | secondary: {
25 | main: '#50c878',
26 | },
27 | text: {
28 | primary: "#ffffff"
29 | },
30 | },
31 | typography: {
32 | fontFamily: [
33 | 'Lato',
34 | 'sans-serif',
35 | ].join(','),
36 | },
37 | });
38 | const tiers = [
39 | {
40 | title: 'Free',
41 | subheader: 'Anonymous User',
42 | price: '$0',
43 | description: [
44 | 'All features',
45 | 'Download 10 files/day',
46 | '50gb File Cap'
47 | ],
48 | buttonText: 'Default',
49 | buttonVariant: 'disabled',
50 | },
51 | {
52 | title: 'Premium',
53 | subheader: 'Unlocks Premium',
54 | link: 'premium',
55 | price: '$2/month',
56 | action: "https://api.leechersparadise.com/create-checkout-session",
57 | method: "POST",
58 | description: [
59 | 'All features',
60 | 'Unlimited Downloads',
61 | 'Unlimited File Sizes',
62 | 'Priority Discord Support',
63 | ],
64 | buttonText: 'Buy Here',
65 | buttonVariant: 'contained',
66 | },
67 | {
68 | title: 'Donate',
69 | subheader: 'Supports Us',
70 | link: 'donate',
71 | price: '♾',
72 | action: "donate",
73 | buttonid: "donatebutton",
74 | method: "GET",
75 | description: [
76 | 'Support LeechersParadise',
77 | 'Discord Perks',
78 | 'Your name in source code'
79 | ],
80 | buttonText: 'Support Here',
81 | buttonVariant: 'contained',
82 | },
83 | ];
84 | function PricingContent() {
85 | return (
86 |
87 |
88 |
89 |
90 |
97 | Premium
98 |
99 |
100 | Not only does this help support us by providing for our monthly costs but you also get perks by signing up for premium.
101 |
102 |
103 | If you would like to purchase premium using a different payment method such as crypto or paypal, please make a ticket in our Discord to begin the process.
104 |
105 |
106 | {/* End hero unit */}
107 |
108 |
109 | {tiers.map((tier) => (
110 | // Enterprise card is full width at sm breakpoint
111 |
118 |
119 | : null}
124 | subheaderTypographyProps={{
125 | align: 'center',
126 | }}
127 | sx={{
128 | backgroundColor: (theme) =>
129 | theme.palette.mode === 'light'
130 | ? theme.palette.grey[200]
131 | : theme.palette.grey[700],
132 | }}
133 | />
134 |
135 |
143 |
144 | {tier.price}
145 |
146 |
147 |
148 | {tier.description.map((line) => (
149 |
155 | {line}
156 |
157 | ))}
158 |
159 |
160 |
161 |
170 |
171 |
172 |
173 |
174 | ))}
175 |
176 |
177 |
178 | );
179 | }
180 | export default function Premium() {
181 | return (
182 |
183 |
184 |
185 | )
186 | }
187 |
--------------------------------------------------------------------------------
/v3 (realdebrid)/frontend/src/pages/success.tsx:
--------------------------------------------------------------------------------
1 | import { createTheme, ThemeProvider} from '@mui/material/styles';
2 | import Box from '@mui/material/Box';
3 | import CssBaseline from '@mui/material/CssBaseline';
4 | import Typography from '@mui/material/Typography';
5 | import Container from '@mui/material/Container';
6 | const NewthemeDark = createTheme({
7 | palette: {
8 | mode: "dark",
9 | background: {
10 | default: "#333333"
11 | },
12 | primary: {
13 | main: '#5E2BE2',
14 | },
15 | secondary: {
16 | main: '#50c878',
17 | },
18 | text: {
19 | primary: "#ffffff"
20 | },
21 | },
22 | typography: {
23 | fontFamily: [
24 | 'Lato',
25 | 'sans-serif',
26 | ].join(','),
27 | },
28 | });
29 | export default function Success() {
30 | return (
31 |
32 |
33 |
34 |
35 | Purchase Success!
36 |
37 |
38 |
39 | We have successfully purchased your premium order!
40 | Please check the email you used to purchase for your credentials. If there is something wrong with your purchase please email: contact@leechersparadise.com for help, or message a dev at our Discord: Here .
41 | We hope you use your account well, and enjoy the benefits that come with having premium!
42 | Thank you again for supporting LeechersParadise!
43 | -Love, The Devs
44 | You may now log in using your credentials Here , or just return to the main page, Here .
45 |
46 |
47 |
48 |
49 |
50 | )
51 | }
--------------------------------------------------------------------------------
/v3 (realdebrid)/frontend/src/pages/userpanel.tsx:
--------------------------------------------------------------------------------
1 | import * as React from "react";
2 | import Avatar from "@mui/material/Avatar";
3 | import Button from "@mui/material/Button";
4 | import CssBaseline from "@mui/material/CssBaseline";
5 | import TextField from "@mui/material/TextField";
6 | import FormControlLabel from "@mui/material/FormControlLabel";
7 | import Checkbox from "@mui/material/Checkbox";
8 | import { Link } from "react-router-dom";
9 | import Grid from "@mui/material/Grid";
10 | import Box from "@mui/material/Box";
11 | import LockOutlinedIcon from "@mui/icons-material/LockOutlined";
12 | import Typography from "@mui/material/Typography";
13 | import Container from "@mui/material/Container";
14 | import Tooltip from "@mui/material/Tooltip";
15 | import ClickAwayListener from "@mui/material/ClickAwayListener";
16 | import { createTheme, ThemeProvider } from "@mui/material/styles";
17 | import { collection, query, where, getDocs } from "firebase/firestore";
18 | import { signInWithEmailAndPassword } from "@firebase/auth";
19 | import { fireAuth } from "../config/firebase.config";
20 | import { useAuthUser } from "../hooks/AuthUser";
21 | import { fireStore } from "../config/firebase.config";
22 | import PersonOutline from "@mui/icons-material/PersonOutline";
23 | const NewthemeDark = createTheme({
24 | palette: {
25 | mode: "dark",
26 | background: {
27 | default: "#333333",
28 | },
29 | primary: {
30 | main: "#5E2BE2",
31 | },
32 | secondary: {
33 | main: "#50c878",
34 | },
35 | text: {
36 | primary: "#ffffff",
37 | },
38 | },
39 | typography: {
40 | fontFamily: ["Lato", "sans-serif"].join(","),
41 | },
42 | });
43 | function Copyright(props: any) {
44 | return (
45 |
51 | {""}
52 |
53 | LeechersParadise
54 | {" "}
55 | {new Date().getFullYear()}
56 | {" - Present"}
57 |
58 | );
59 | }
60 | export default function UserPanel() {
61 | const [open, setOpen] = React.useState(false);
62 | const [customer, setCustomer] = React.useState("");
63 | const user = useAuthUser();
64 | const handleTooltipClose = () => {
65 | setOpen(false);
66 | };
67 | async function handleCustomer(email) {
68 | const q = query(
69 | collection(fireStore, "users"),
70 | where("email", "==", email)
71 | );
72 | const querySnapshot = await getDocs(q);
73 | querySnapshot.forEach((doc) => {
74 | // doc.data() is never undefined for query doc snapshots
75 | const data = doc.data();
76 | const customer = data.customer as string;
77 | setCustomer(customer);
78 | });
79 | }
80 | const handleSubmit = (event: React.FormEvent) => {
81 | const data = new FormData(event.currentTarget);
82 | const user = data.get("user") as string;
83 | const password = data.get("password") as string;
84 | signInWithEmailAndPassword(fireAuth, user, password).catch((error) => {
85 | setOpen(true);
86 | });
87 | event.preventDefault();
88 | };
89 | if (user) {
90 | const email = user.email;
91 | handleCustomer(email);
92 | return (
93 |
94 |
95 |
96 |
104 |
105 |
106 |
107 |
108 | Welcome to LeechersParadise:
109 |
110 |
120 |
121 |
129 |
147 |
148 |
156 |
157 | Change Email
158 |
159 |
160 |
161 |
162 | );
163 | } else {
164 | return (
165 |
166 |
167 |
168 |
169 |
177 |
178 |
179 |
180 |
181 | Sign In
182 |
183 |
189 |
198 |
207 | }
209 | label="Remember me"
210 | />
211 |
222 |
228 | Sign In
229 |
230 |
231 |
232 |
233 |
234 | Forgot password?
235 |
236 |
237 |
238 |
239 |
240 |
241 |
242 |
243 |
244 | );
245 | }
246 | }
247 |
--------------------------------------------------------------------------------
/v3 (realdebrid)/frontend/src/react-app-env.d.ts:
--------------------------------------------------------------------------------
1 | ///
2 | ///
3 | ///
4 | ///
5 |
6 | declare namespace NodeJS {
7 | interface ProcessEnv {
8 | readonly NODE_ENV: "development" | "production" | "test";
9 | readonly PUBLIC_URL: string;
10 | }
11 | }
12 |
13 | declare module "*.avif" {
14 | const src: string;
15 | export default src;
16 | }
17 |
18 | declare module "*.bmp" {
19 | const src: string;
20 | export default src;
21 | }
22 |
23 | declare module "*.gif" {
24 | const src: string;
25 | export default src;
26 | }
27 |
28 | declare module "*.jpg" {
29 | const src: string;
30 | export default src;
31 | }
32 |
33 | declare module "*.jpeg" {
34 | const src: string;
35 | export default src;
36 | }
37 |
38 | declare module "*.png" {
39 | const src: string;
40 | export default src;
41 | }
42 |
43 | declare module "*.webp" {
44 | const src: string;
45 | export default src;
46 | }
47 |
48 | declare module "*.svg" {
49 | import * as React from "react";
50 |
51 | export const ReactComponent: React.FunctionComponent<
52 | React.SVGProps & { title?: string }
53 | >;
54 |
55 | const src: string;
56 | export default src;
57 | }
58 |
59 | declare module "*.module.css" {
60 | const classes: { readonly [key: string]: string };
61 | export default classes;
62 | }
63 |
64 | declare module "*.module.scss" {
65 | const classes: { readonly [key: string]: string };
66 | export default classes;
67 | }
68 |
69 | declare module "*.module.sass" {
70 | const classes: { readonly [key: string]: string };
71 | export default classes;
72 | }
73 |
--------------------------------------------------------------------------------
/v3 (realdebrid)/frontend/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "compilerOptions": {
3 | "target": "es2017",
4 | "lib": [
5 | "dom",
6 | "dom.iterable",
7 | "esnext"
8 | ],
9 | "allowJs": true,
10 | "skipLibCheck": true,
11 | "esModuleInterop": true,
12 | "allowSyntheticDefaultImports": true,
13 | "strict": true,
14 | "forceConsistentCasingInFileNames": true,
15 | "noFallthroughCasesInSwitch": true,
16 | "module": "esnext",
17 | "moduleResolution": "node",
18 | "resolveJsonModule": true,
19 | "isolatedModules": true,
20 | "noEmit": true,
21 | "jsx": "react-jsx",
22 | "noImplicitReturns": true,
23 | "noImplicitAny": false
24 |
25 | },
26 | "include": [
27 | "src"
28 | ]
29 | }
30 |
--------------------------------------------------------------------------------
/v4 (alldebrid)/backend/.dockerignore:
--------------------------------------------------------------------------------
1 | node_modules
2 | npm-debug.log
--------------------------------------------------------------------------------
/v4 (alldebrid)/backend/.gitignore:
--------------------------------------------------------------------------------
1 | # Logs
2 | logs
3 | *.log
4 | npm-debug.log*
5 | yarn-debug.log*
6 | yarn-error.log*
7 | lerna-debug.log*
8 | .pnpm-debug.log*
9 |
10 | # Diagnostic reports (https://nodejs.org/api/report.html)
11 | report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json
12 |
13 | # Runtime data
14 | pids
15 | *.pid
16 | *.seed
17 | *.pid.lock
18 |
19 | # Directory for instrumented libs generated by jscoverage/JSCover
20 | lib-cov
21 |
22 | # Coverage directory used by tools like istanbul
23 | coverage
24 | *.lcov
25 |
26 | # nyc test coverage
27 | .nyc_output
28 |
29 | # Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files)
30 | .grunt
31 |
32 | # Bower dependency directory (https://bower.io/)
33 | bower_components
34 |
35 | # node-waf configuration
36 | .lock-wscript
37 |
38 | # Compiled binary addons (https://nodejs.org/api/addons.html)
39 | build/Release
40 |
41 | # Dependency directories
42 | node_modules/
43 | jspm_packages/
44 |
45 | # Snowpack dependency directory (https://snowpack.dev/)
46 | web_modules/
47 |
48 | # TypeScript cache
49 | *.tsbuildinfo
50 |
51 | # Optional npm cache directory
52 | .npm
53 |
54 | # Optional eslint cache
55 | .eslintcache
56 |
57 | # Optional stylelint cache
58 | .stylelintcache
59 |
60 | # Microbundle cache
61 | .rpt2_cache/
62 | .rts2_cache_cjs/
63 | .rts2_cache_es/
64 | .rts2_cache_umd/
65 |
66 | # Optional REPL history
67 | .node_repl_history
68 |
69 | # Output of 'npm pack'
70 | *.tgz
71 |
72 | # Yarn Integrity file
73 | .yarn-integrity
74 |
75 | # parcel-bundler cache (https://parceljs.org/)
76 | .cache
77 | .parcel-cache
78 |
79 | # Next.js build output
80 | .next
81 | out
82 |
83 | # Nuxt.js build / generate output
84 | .nuxt
85 | dist
86 |
87 | # Gatsby files
88 | .cache/
89 | # Comment in the public line in if your project uses Gatsby and not Next.js
90 | # https://nextjs.org/blog/next-9-1#public-directory-support
91 | # public
92 |
93 | # vuepress build output
94 | .vuepress/dist
95 |
96 | # vuepress v2.x temp and cache directory
97 | .temp
98 | .cache
99 |
100 | # Docusaurus cache and generated files
101 | .docusaurus
102 |
103 | # Serverless directories
104 | .serverless/
105 |
106 | # FuseBox cache
107 | .fusebox/
108 |
109 | # DynamoDB Local files
110 | .dynamodb/
111 |
112 | # TernJS port file
113 | .tern-port
114 |
115 | # Stores VSCode versions used for testing VSCode extensions
116 | .vscode-test
117 |
118 | # yarn v2
119 | .yarn/cache
120 | .yarn/unplugged
121 | .yarn/build-state.yml
122 | .yarn/install-state.gz
123 | .pnp.*
--------------------------------------------------------------------------------
/v4 (alldebrid)/backend/dockerfile:
--------------------------------------------------------------------------------
1 | FROM node:16
2 | WORKDIR /usr/src/app
3 | COPY package*.json ./
4 | RUN npm install --omit=dev
5 | ENV APITOKEN=TOKEN
6 | ENV APITOKEN2=TOKEN
7 | ENV APITOKENPREMIUM=TOKEN
8 | ENV APITOKENPREMIUM2=TOKEN
9 | COPY . .
10 | EXPOSE 3001
11 | EXPOSE 3002
12 | CMD [ "node", "src/index.js" ]
13 |
--------------------------------------------------------------------------------
/v4 (alldebrid)/backend/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "backend",
3 | "version": "1.0.0",
4 | "description": "",
5 | "main": "index.js",
6 | "homepage": ".",
7 | "scripts": {
8 | "dev": "nodemon src/index.js",
9 | "devv": "node src/index.js",
10 | "start": "node src/index.js NODE_ENV=production node"
11 | },
12 | "author": "",
13 | "license": "ISC",
14 | "dependencies": {
15 | "all-debrid-api": "^1.1.0",
16 | "axios": "^0.27.2",
17 | "body-parser": "^1.20.0",
18 | "coinbase-commerce-node": "^1.0.4",
19 | "compression": "^1.7.4",
20 | "cors": "^2.8.5",
21 | "dotenv": "^16.0.0",
22 | "download": "^8.0.0",
23 | "ejs": "^3.1.8",
24 | "express": "^4.17.3",
25 | "express-basic-auth": "^1.2.1",
26 | "express-http-proxy": "^1.6.3",
27 | "express-queue": "^0.0.13",
28 | "express-rate-limit": "^6.4.0",
29 | "firebase": "^9.6.10",
30 | "firebase-admin": "^11.0.1",
31 | "got": "^12.1.0",
32 | "helmet": "^5.1.0",
33 | "morgan": "^1.10.0",
34 | "mysql": "^2.18.1",
35 | "node-real-debrid": "^1.0.6",
36 | "nodemailer": "^6.7.5",
37 | "nodemon": "^2.0.15",
38 | "paypal-node-sdk": "^2.0.3",
39 | "pug": "^3.0.2",
40 | "rate-limit-mongo": "^2.3.2",
41 | "rate-limit-redis": "^3.0.1",
42 | "real-debrid-api": "^1.1.0",
43 | "redis": "^4.3.0",
44 | "request-ip": "^2.2.0",
45 | "sqlite3": "^5.0.8",
46 | "stripe": "^9.0.0",
47 | "sugar": "^2.0.6",
48 | "ts-node": "^10.8.0",
49 | "ws": "^8.9.0"
50 | },
51 | "devDependencies": {
52 | "http-proxy-middleware": "^2.0.6"
53 | }
54 | }
55 |
--------------------------------------------------------------------------------
/v4 (alldebrid)/backend/src/config/admin.json:
--------------------------------------------------------------------------------
1 | {
2 | "type": "service_account",
3 | "project_id": "leechersparadise",
4 | "private_key_id": "3fffdc957e4f4a283b14a1fc1d9e2b1db172f8d9",
5 | "private_key": "-----BEGIN PRIVATE KEY-----\nMIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQC4hu65IUrpv8+h\nm2nqNmgZc4AIw/eBbMA2CPO39CgdZCvUHnPMb0eR8xcilYThjVbOjxX/fYeaUTUT\nke/MaFgE+prhB9FcaSy6BbGRCj1s7IIOdJhIOglrorj3JEpgTUE1n0Y2d3GjWhFZ\nkF5sZD8DLQmxOlNDXwWiEXkmTMqvmiRtM0HNJbEjYgCzzT6Uq/DsCqKDQzc/LOU2\npNJFPeUBpO8ZirUYYb2ZpEUTITwH3zhPzYBS9eTiIvCwT8J+yxhfHsfzgLO6nE89\nD65iD6bjIbQwz7rEPi1FFocufm2Ib5hhbAkzHkCwpAOi+h4UokZfE8lbfUJ/nEZn\nBdWPQ/4jAgMBAAECggEAATGeScRVX73F8h23SbSgZ8m/gk8CQuwZMkBMk1wZBlen\nkO/BgAkYRXF1LNwax/rKHPwAAG8neXAdD8tZ6dCjASU960bJq/diOrHevDl8vD+r\nd7x5X75AYVnkKHUrpgPZ8CbfpWqQaaYjhpjQg5MCdVrNPUBLWZw7xRin1/+XMBuk\nXozwq798/8s6UD98bQ3vPZPOzYsDuO1SYlaez+QoP17PXmKrV90TfiuOixc8PpQy\n2iHpmQz9sVvcTKffveRf7267xa/9ECuIE21TVvwRe+rJbJ+BtomgbZhPl+8CAuz5\n1KWfmjQVQXWC0ReKBrh51PtaWyb2k9wFlft+7KZdgQKBgQDq8TDGgrzBbFStKaCm\nE9pN8qCHxWD9LZOonO7t0JapiX0djVMwki0KaOmD+Q18lUf8Ka3uZdQ1zRZoU2YH\nwmUoF50KZZBuqldMv+OvJ0TF1StO4hOgV/C3QXTM2H6tGT2vzOwlZqKfYWEEGO4I\nbeM9UO1DkrkyT67aNsTrFF8sWQKBgQDJEPR2C4V3ZM1C81oTWMCNiHrH0Bts0iz5\nLtcCVeEcW75Q03BvrJgbfpYY3KA5haTcjYLAcGYQrq1Xv9PA6jbyz45LynXatCMM\nxzGSXPYRXX8/BbhHE1e+791jPrFLV6fKnn1S/2POQ+5Nqm+ixwv8GYKyKJK3iiGu\nmd1ZfIe+2wKBgGuTNHowsqz+JWeEgAKLZJH8XnTMc7R5gfraoKxTrijCw38cjtLW\nm7kAgKvlBb/durBDhVh7V8equG/cgANdh2PsLAPurUt+w6po0qAIovzStpnP+pyY\np6fBWPHSz24C+LPeaOJXNG81724o3BUP+9S/kWQ3coUO50kTeucI1OtBAoGAYDfO\n5JaK3iHM4FcYKd3090Xyi6AZH7BMeUpi9ekm+q0knAUy7x4HBFFFfsxFmIFN7YWC\nppijHySYKz/PE6iBdxzAGaDfWTOO+lRwcnwt/Q1jEUOpdcnZ2bNrnEyqB0YBM8M4\ncflpR5HWfjArkBf0skV698rWuyJNEALtnB8tzrUCgYEA2DMNQ7S+gq28fUWaQQYH\nnh3qtS8ZAITg7Zy6ZJeUquup9VqbuP9Ke+YWDvkW5HI5Ifn66yMFGdSGsDhkUHwQ\nCX68lXxuRqkpYRUa31jhyZ3rOBIqH1bw/Zn9epSMLFFyG6XCSsNQn1r6RKxEoJ6s\nrK5WQ+OU44otc/2E6fnW5PA=\n-----END PRIVATE KEY-----\n",
6 | "client_email": "firebase-adminsdk-qivkf@leechersparadise.iam.gserviceaccount.com",
7 | "client_id": "105814507184889961975",
8 | "auth_uri": "https://accounts.google.com/o/oauth2/auth",
9 | "token_uri": "https://oauth2.googleapis.com/token",
10 | "auth_provider_x509_cert_url": "https://www.googleapis.com/oauth2/v1/certs",
11 | "client_x509_cert_url": "https://www.googleapis.com/robot/v1/metadata/x509/firebase-adminsdk-qivkf%40leechersparadise.iam.gserviceaccount.com"
12 | }
13 |
--------------------------------------------------------------------------------
/v4 (alldebrid)/backend/src/config/firebase.config.js:
--------------------------------------------------------------------------------
1 | const {initializeApp} = require('firebase/app')
2 | const firebaseConfig = {
3 | apiKey: process.env.apiKey,
4 | authDomain: process.env.authDomain,
5 | projectId: process.env.projectId,
6 | storageBucket: process.env.storageBucket,
7 | messagingSenderId: process.env.messagingSenderId,
8 | appId: process.env.appId,
9 | measurementId: process.env.measurementId,
10 | }
11 | function createFirebaseApp(config) {
12 | const firebaseApp = initializeApp(config)
13 | return firebaseApp
14 | }
15 |
16 | const firebaseApp = createFirebaseApp(firebaseConfig)
17 | module.exports = {
18 | firebaseApp
19 | }
--------------------------------------------------------------------------------
/v4 (alldebrid)/backend/src/config/firebaseadmin.config.js:
--------------------------------------------------------------------------------
1 | var admin = require("firebase-admin");
2 | var serviceAccount = require("./admin.json");
3 | function createFirebaseAdmin() {
4 | const firebaseAdmin = admin.initializeApp({
5 | credential: admin.credential.cert(serviceAccount)
6 | });
7 | }
8 | const firebaseAdmin = createFirebaseAdmin()
9 | module.exports = {
10 | firebaseAdmin
11 | }
--------------------------------------------------------------------------------
/v4 (alldebrid)/backend/src/views/favicon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Wamy-Dev/LeechersParadise/ab9d6493f7e39995c6b84fd54e7b9bcc75a3246e/v4 (alldebrid)/backend/src/views/favicon.png
--------------------------------------------------------------------------------
/v4 (alldebrid)/backend/src/views/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 | LeechersParadise API
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
LeechersParadise API is online.
17 |
18 |
24 |
25 |
26 |
27 |
28 |
29 |
--------------------------------------------------------------------------------
/v4 (alldebrid)/backend/src/views/uptime.js:
--------------------------------------------------------------------------------
1 | const ws = new WebSocket('ws://data.leechersparadise.com',"echo-protocol");
2 | ws.addEventListener('message', (data) => {
3 | // Send a message to the WebSocket server
4 | var object = JSON.parse(data.data)
5 | document.getElementById('uptime').innerHTML = "Up for " + object.uptime + "."
6 | document.getElementById('links').innerHTML = object.linkcount + " links downloaded."
7 | document.getElementById('torrents').innerHTML = object.torrentcount + " torrents downloaded."
8 | });
9 |
--------------------------------------------------------------------------------
/v4 (alldebrid)/frontend/.gitignore:
--------------------------------------------------------------------------------
1 | # Logs
2 | logs
3 | *.log
4 | npm-debug.log*
5 | yarn-debug.log*
6 | yarn-error.log*
7 | lerna-debug.log*
8 | .pnpm-debug.log*
9 |
10 | # Diagnostic reports (https://nodejs.org/api/report.html)
11 | report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json
12 |
13 | # Runtime data
14 | pids
15 | *.pid
16 | *.seed
17 | *.pid.lock
18 | build
19 | # Directory for instrumented libs generated by jscoverage/JSCover
20 | lib-cov
21 |
22 | # Coverage directory used by tools like istanbul
23 | coverage
24 | *.lcov
25 |
26 | # nyc test coverage
27 | .nyc_output
28 |
29 | # Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files)
30 | .grunt
31 |
32 | # Bower dependency directory (https://bower.io/)
33 | bower_components
34 |
35 | # node-waf configuration
36 | .lock-wscript
37 |
38 | # Compiled binary addons (https://nodejs.org/api/addons.html)
39 | build/Release
40 |
41 | # Dependency directories
42 | node_modules/
43 | jspm_packages/
44 |
45 | # Snowpack dependency directory (https://snowpack.dev/)
46 | web_modules/
47 |
48 | # TypeScript cache
49 | *.tsbuildinfo
50 |
51 | # Optional npm cache directory
52 | .npm
53 |
54 | # Optional eslint cache
55 | .eslintcache
56 |
57 | # Optional stylelint cache
58 | .stylelintcache
59 |
60 | # Microbundle cache
61 | .rpt2_cache/
62 | .rts2_cache_cjs/
63 | .rts2_cache_es/
64 | .rts2_cache_umd/
65 |
66 | # Optional REPL history
67 | .node_repl_history
68 |
69 | # Output of 'npm pack'
70 | *.tgz
71 |
72 | # Yarn Integrity file
73 | .yarn-integrity
74 |
75 |
76 | # parcel-bundler cache (https://parceljs.org/)
77 | .cache
78 | .parcel-cache
79 |
80 | # Next.js build output
81 | .next
82 | out
83 |
84 | # Nuxt.js build / generate output
85 | .nuxt
86 | dist
87 |
88 | # Gatsby files
89 | .cache/
90 | # Comment in the public line in if your project uses Gatsby and not Next.js
91 | # https://nextjs.org/blog/next-9-1#public-directory-support
92 | # public
93 |
94 | # vuepress build output
95 | .vuepress/dist
96 |
97 | # vuepress v2.x temp and cache directory
98 | .temp
99 | .cache
100 |
101 | # Docusaurus cache and generated files
102 | .docusaurus
103 |
104 | # Serverless directories
105 | .serverless/
106 |
107 | # FuseBox cache
108 | .fusebox/
109 |
110 | # DynamoDB Local files
111 | .dynamodb/
112 |
113 | # TernJS port file
114 | .tern-port
115 |
116 | # Stores VSCode versions used for testing VSCode extensions
117 | .vscode-test
118 |
119 | # yarn v2
120 | .yarn/cache
121 | .yarn/unplugged
122 | .yarn/build-state.yml
123 | .yarn/install-state.gz
124 | .pnp.*
--------------------------------------------------------------------------------
/v4 (alldebrid)/frontend/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "my-app",
3 | "version": "0.1.0",
4 | "private": true,
5 | "dependencies": {
6 | "@ctrl/react-adsense": "^1.6.0",
7 | "@emotion/react": "^11.8.2",
8 | "@emotion/styled": "^11.8.1",
9 | "@fontsource/roboto": "^4.5.3",
10 | "@material-ui/icons": "^4.11.3",
11 | "@material-ui/lab": "^4.0.0-alpha.60",
12 | "@material/top-app-bar": "^13.0.0",
13 | "@mui/icons-material": "^5.5.1",
14 | "@mui/lab": "^5.0.0-alpha.75",
15 | "@mui/material": "^5.5.1",
16 | "@mui/styles": "^5.8.6",
17 | "@types/jest": "^27.4.1",
18 | "@types/react": "^17.0.41",
19 | "@types/react-dom": "^17.0.14",
20 | "chalk": "^5.0.1",
21 | "chalk-animation": "^2.0.2",
22 | "file-saver": "^2.0.5",
23 | "firebase": "^9.8.1",
24 | "react": "^17.0.2",
25 | "react-coinbase-commerce": "^1.6.0",
26 | "react-copy-to-clipboard": "^5.1.0",
27 | "react-device-detect": "^2.2.2",
28 | "react-dom": "^17.0.2",
29 | "react-lazy-load": "^4.0.1",
30 | "react-router-dom": "^6.3.0",
31 | "react-router-hash-link": "^2.4.3",
32 | "react-scripts": "^5.0.0",
33 | "serve": "^13.0.2",
34 | "sugar": "^2.0.6",
35 | "terminal-link": "^3.0.0",
36 | "typescript": "^4.6.2"
37 | },
38 | "scripts": {
39 | "start": "react-scripts start",
40 | "build": "react-scripts build",
41 | "test": "react-scripts test",
42 | "eject": "react-scripts eject"
43 | },
44 | "eslintConfig": {
45 | "extends": [
46 | "react-app",
47 | "react-app/jest"
48 | ]
49 | },
50 | "browserslist": {
51 | "production": [
52 | ">0.2%",
53 | "not dead",
54 | "not op_mini all"
55 | ],
56 | "development": [
57 | "last 1 chrome version",
58 | "last 1 firefox version",
59 | "last 1 safari version"
60 | ]
61 | },
62 | "devDependencies": {
63 | "@types/node": "^18.0.1"
64 | }
65 | }
66 |
--------------------------------------------------------------------------------
/v4 (alldebrid)/frontend/public/android-chrome-192x192.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Wamy-Dev/LeechersParadise/ab9d6493f7e39995c6b84fd54e7b9bcc75a3246e/v4 (alldebrid)/frontend/public/android-chrome-192x192.png
--------------------------------------------------------------------------------
/v4 (alldebrid)/frontend/public/android-chrome-512x512.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Wamy-Dev/LeechersParadise/ab9d6493f7e39995c6b84fd54e7b9bcc75a3246e/v4 (alldebrid)/frontend/public/android-chrome-512x512.png
--------------------------------------------------------------------------------
/v4 (alldebrid)/frontend/public/apple-touch-icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Wamy-Dev/LeechersParadise/ab9d6493f7e39995c6b84fd54e7b9bcc75a3246e/v4 (alldebrid)/frontend/public/apple-touch-icon.png
--------------------------------------------------------------------------------
/v4 (alldebrid)/frontend/public/browserconfig.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | #da532c
7 |
8 |
9 |
10 |
--------------------------------------------------------------------------------
/v4 (alldebrid)/frontend/public/favicon-16x16.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Wamy-Dev/LeechersParadise/ab9d6493f7e39995c6b84fd54e7b9bcc75a3246e/v4 (alldebrid)/frontend/public/favicon-16x16.png
--------------------------------------------------------------------------------
/v4 (alldebrid)/frontend/public/favicon-32x32.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Wamy-Dev/LeechersParadise/ab9d6493f7e39995c6b84fd54e7b9bcc75a3246e/v4 (alldebrid)/frontend/public/favicon-32x32.png
--------------------------------------------------------------------------------
/v4 (alldebrid)/frontend/public/favicon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Wamy-Dev/LeechersParadise/ab9d6493f7e39995c6b84fd54e7b9bcc75a3246e/v4 (alldebrid)/frontend/public/favicon.ico
--------------------------------------------------------------------------------
/v4 (alldebrid)/frontend/public/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
22 | Leechers Paradise
23 |
27 |
28 |
29 | You need to enable JavaScript to run this app.
30 |
33 |
34 |
35 |
--------------------------------------------------------------------------------
/v4 (alldebrid)/frontend/public/mstile-150x150.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Wamy-Dev/LeechersParadise/ab9d6493f7e39995c6b84fd54e7b9bcc75a3246e/v4 (alldebrid)/frontend/public/mstile-150x150.png
--------------------------------------------------------------------------------
/v4 (alldebrid)/frontend/public/robots.txt:
--------------------------------------------------------------------------------
1 | # https://www.robotstxt.org/robotstxt.html
2 | User-agent: *
3 | Disallow:
4 |
--------------------------------------------------------------------------------
/v4 (alldebrid)/frontend/public/site.webmanifest:
--------------------------------------------------------------------------------
1 | {
2 | "name": "Leechers Paradise",
3 | "short_name": "Leechers Paradise",
4 | "icons": [
5 | {
6 | "src": "/android-chrome-192x192.png",
7 | "sizes": "192x192",
8 | "type": "image/png"
9 | },
10 | {
11 | "src": "/android-chrome-512x512.png",
12 | "sizes": "512x512",
13 | "type": "image/png"
14 | }
15 | ],
16 | "theme_color": "#ffffff",
17 | "background_color": "#ffffff",
18 | "display": "standalone"
19 | }
20 |
--------------------------------------------------------------------------------
/v4 (alldebrid)/frontend/src/apis/admin-panel.api.js:
--------------------------------------------------------------------------------
1 | export async function saveAdminPanel(formState) {
2 | return await fetch('https://api.leechersparadise.com/admin', {
3 | method: 'POST', // or 'PUT'
4 | headers: {
5 | 'Content-Type': 'application/json',
6 | },
7 | body: JSON.stringify(formState),
8 | })
9 | }
10 | export async function getAdminPanel() {
11 | return await fetch('https://api.leechersparadise.com/admin', {
12 | method: 'GET', // or 'PUT'
13 | headers: {
14 | 'Content-Type': 'application/json',
15 | }
16 | })
17 | }
--------------------------------------------------------------------------------
/v4 (alldebrid)/frontend/src/app.tsx:
--------------------------------------------------------------------------------
1 | import {
2 | BrowserRouter as Router,
3 | Routes,
4 | Route
5 | } from "react-router-dom";
6 | import Main from "./components/main";
7 | import AdminPanel from "./pages/admin-panel";
8 | import About from "./pages/about";
9 | import ButtonAppBar from "./components/topnav";
10 | import UserPanel from "./pages/userpanel";
11 | import Premium from "./pages/premium";
12 | import Donate from "./pages/donate";
13 | import NotFound from "./pages/404";
14 | import Success from "./pages/success"
15 | import Forgot from "./pages/forgot"
16 | import Torrent from "./pages/torrent"
17 | import ChangeEmail from './pages/changeemail'
18 | import Support from './pages/support'
19 | import Policies from './pages/policies'
20 | export default function App() {
21 | return (
22 |
23 |
24 |
25 |
26 | } />
27 | } />
28 | } />
29 | } />
30 | } />
31 | } />
32 | } />
33 | } />
34 | } />
35 | } />
36 | } />
37 | } />
38 | } />
39 |
40 |
41 |
42 | );
43 | }
44 |
--------------------------------------------------------------------------------
/v4 (alldebrid)/frontend/src/components/assets/piracy_logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Wamy-Dev/LeechersParadise/ab9d6493f7e39995c6b84fd54e7b9bcc75a3246e/v4 (alldebrid)/frontend/src/components/assets/piracy_logo.png
--------------------------------------------------------------------------------
/v4 (alldebrid)/frontend/src/components/assets/piracy_logo.png.bk:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Wamy-Dev/LeechersParadise/ab9d6493f7e39995c6b84fd54e7b9bcc75a3246e/v4 (alldebrid)/frontend/src/components/assets/piracy_logo.png.bk
--------------------------------------------------------------------------------
/v4 (alldebrid)/frontend/src/components/assets/premium.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Wamy-Dev/LeechersParadise/ab9d6493f7e39995c6b84fd54e7b9bcc75a3246e/v4 (alldebrid)/frontend/src/components/assets/premium.png
--------------------------------------------------------------------------------
/v4 (alldebrid)/frontend/src/components/assets/premium.png.bk:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Wamy-Dev/LeechersParadise/ab9d6493f7e39995c6b84fd54e7b9bcc75a3246e/v4 (alldebrid)/frontend/src/components/assets/premium.png.bk
--------------------------------------------------------------------------------
/v4 (alldebrid)/frontend/src/components/topnav.tsx:
--------------------------------------------------------------------------------
1 | import * as React from 'react';
2 | import AppBar from '@mui/material/AppBar';
3 | import Box from '@mui/material/Box';
4 | import Toolbar from '@mui/material/Toolbar';
5 | import Typography from '@mui/material/Typography';
6 | import Button from '@mui/material/Button';
7 | import IconButton from '@mui/material/IconButton';
8 | import MenuIcon from '@mui/icons-material/Menu';
9 | import Menu from '@mui/material/Menu';
10 | import MenuItem from '@mui/material/MenuItem';
11 | import Fade from '@mui/material/Fade';
12 | import { Link } from 'react-router-dom'
13 | import { createTheme, ThemeProvider } from '@mui/material/styles';
14 | import { useAuthUser } from '../hooks/AuthUser';
15 | import { signOut } from 'firebase/auth';
16 | import { fireAuth } from '../config/firebase.config';
17 | import { Logout } from '@mui/icons-material';
18 | import { HashLink } from 'react-router-hash-link';
19 | const NewthemeDark = createTheme({
20 | palette: {
21 | mode: "dark",
22 | background: {
23 | default: "#333333"
24 | },
25 | primary: {
26 | main: '#5E2BE2',
27 | },
28 | secondary: {
29 | main: '#50c878',
30 | },
31 | text: {
32 | primary: "#ffffff"
33 | },
34 | },
35 | typography: {
36 | fontFamily: [
37 | 'Lato',
38 | 'sans-serif',
39 | ].join(','),
40 | },
41 | });
42 |
43 | export default function ButtonAppBar() {
44 | const [anchorEl, setAnchorEl] = React.useState(null);
45 | const user = useAuthUser()
46 | const open = Boolean(anchorEl);
47 | const handleClick = (event: React.MouseEvent) => {
48 | setAnchorEl(event.currentTarget);
49 | };
50 | const handleClose = () => {
51 | setAnchorEl(null);
52 | };
53 |
54 | const logout = () => {
55 | signOut(fireAuth)
56 | }
57 | return (
58 | <>
59 |
60 |
61 |
62 |
63 |
71 |
72 |
73 |
74 |
75 |
76 |
79 | {user ? user?.email : 'User Panel'}
80 | {user &&
81 |
86 | }
87 |
88 |
89 |
90 |
91 |
92 |
113 |
114 | >
115 | );
116 | }
117 |
--------------------------------------------------------------------------------
/v4 (alldebrid)/frontend/src/config/firebase.config.tsx:
--------------------------------------------------------------------------------
1 | import { FirebaseOptions, getApps, getApp, initializeApp } from 'firebase/app'
2 | import { getAnalytics } from 'firebase/analytics'
3 | import { getAuth, User } from 'firebase/auth'
4 | import { getFirestore } from '@firebase/firestore'
5 | import { getStorage } from '@firebase/storage'
6 | const firebaseConfig = {
7 | //apikey data
8 | }
9 | function createFirebaseApp(config: FirebaseOptions) {
10 | if (!getApps.length) {
11 | const firebaseApp = initializeApp(config)
12 | if (typeof window !== 'undefined') {
13 | if ('measurementId' in firebaseConfig) {
14 | getAnalytics()
15 | }
16 | return firebaseApp
17 | }
18 | return firebaseApp
19 | } else {
20 | return getApp()
21 | }
22 | }
23 | const firebaseApp = createFirebaseApp(firebaseConfig)
24 | export const fireAuth = getAuth(firebaseApp)
25 | export const fireStore = getFirestore(firebaseApp)
26 | export const fireStorage = getStorage(firebaseApp)
27 | export const auth = {
28 | currentUser: null as (User | null),
29 | token : ''
30 | }
--------------------------------------------------------------------------------
/v4 (alldebrid)/frontend/src/hooks/AuthUser.tsx:
--------------------------------------------------------------------------------
1 | import {useEffect, useState } from "react";
2 | import {auth, fireAuth } from "../config/firebase.config";
3 |
4 | export function useAuthUser(): user | null {
5 | const [currentUser, setCurrentUser] = useState(null);
6 |
7 | function handleStatusChange(user) {
8 | setCurrentUser(user);
9 | }
10 |
11 | useEffect(() => {
12 | fireAuth.onAuthStateChanged((user) => {
13 | user?.getIdToken().then((token) => {
14 | auth.token = token
15 | })
16 | auth.currentUser = user
17 | handleStatusChange(user)
18 | })
19 | });
20 |
21 | return currentUser;
22 | }
23 |
24 | export interface user {
25 | email: string
26 | }
--------------------------------------------------------------------------------
/v4 (alldebrid)/frontend/src/index.tsx:
--------------------------------------------------------------------------------
1 | import ReactDOM from 'react-dom';
2 | import App from "./app";
3 | ReactDOM.render( , document.getElementsByClassName('root')[0]);
--------------------------------------------------------------------------------
/v4 (alldebrid)/frontend/src/pages/404.tsx:
--------------------------------------------------------------------------------
1 | import { createTheme, ThemeProvider} from '@mui/material/styles';
2 | import Box from '@mui/material/Box';
3 | import CssBaseline from '@mui/material/CssBaseline';
4 | import { Link } from 'react-router-dom'
5 |
6 |
7 | const NewthemeDark = createTheme({
8 | palette: {
9 | mode: "dark",
10 | background: {
11 | default: "#333333"
12 | },
13 | primary: {
14 | main: '#5E2BE2',
15 | },
16 | secondary: {
17 | main: '#50c878',
18 | },
19 | text: {
20 | primary: "#ffffff"
21 | },
22 | },
23 | typography: {
24 | fontFamily: [
25 | 'Lato',
26 | 'sans-serif',
27 | ].join(','),
28 | },
29 | });
30 | export default function NotFound() {
31 | return (
32 |
33 |
34 |
35 |
36 |
404, you aren't supposed to be here...
37 | Lets take you back to the main page.
38 |
39 |
40 |
41 |
42 | )
43 | }
--------------------------------------------------------------------------------
/v4 (alldebrid)/frontend/src/pages/admin-panel.jsx:
--------------------------------------------------------------------------------
1 | import {
2 | Alert,
3 | Card,
4 | CardContent,
5 | CardHeader,
6 | TextField
7 | } from "@mui/material";
8 | import Container from "@mui/material/Container";
9 | import Button from "@mui/material/Button";
10 | import Grid from "@mui/material/Grid";
11 | import Box from "@mui/material/Box";
12 | import {Link} from "react-router-dom";
13 | import HomeIcon from '@mui/icons-material/Home'
14 | import {useState, useEffect} from "react";
15 | import Snackbar from '@mui/material/Snackbar';
16 | import { createMuiTheme, ThemeProvider} from '@mui/material/styles';
17 | import CssBaseline from '@mui/material/CssBaseline';
18 | import {saveAdminPanel, getAdminPanel} from "../apis/admin-panel.api";
19 | export default function AdminPanel() {
20 | const [formState, setFormState] = useState({dollarvalue: '', dollargoal: ''});
21 | const [alert, setAlert] = useState({message: '', severity: ''});
22 | const [open, setOpen] = useState(false);
23 | const handleClose = (event, reason) => {
24 | if (reason === 'clickaway') {
25 | return;
26 | }
27 | setOpen(false);
28 | };
29 | async function save(event) {
30 | event.preventDefault()
31 | try {
32 | const result = await saveAdminPanel(formState)
33 | if (result.status !== 200) throw 'Error'
34 | setAlert({message: 'Success! Added values to the donation bar.', severity: 'success'});
35 | setOpen(true)
36 | } catch(ex) {
37 | setAlert({message: 'Failure! Something went wrong.', severity:'error'});
38 | setOpen(true)
39 | }
40 | }
41 | useEffect(async () => {
42 | const response = await getAdminPanel();
43 | const result = await response.json()
44 | setFormState({dollargoal: result.dollarGoal, dollarvalue: result.dollarValue})
45 | },[])
46 | const NewthemeDark = createMuiTheme({
47 | palette: {
48 | mode: "dark",
49 | background: {
50 | default: "#333333"
51 | },
52 | primary: {
53 | main: '#5E2BE2',
54 | },
55 | secondary: {
56 | main: '#50c878',
57 | },
58 | text: {
59 | primary: "#ffffff"
60 | },
61 | },
62 | typography: {
63 | fontFamily: [
64 | 'Lato',
65 | 'sans-serif',
66 | ].join(','),
67 | },
68 | });
69 | return (
70 |
71 |
72 |
73 |
74 |
75 |
76 |
77 |
82 |
83 |
84 |
85 |
122 |
123 |
124 |
125 |
126 |
127 | {alert.message}
128 |
129 |
130 |
131 |
132 |
133 |
134 | )
135 | }
--------------------------------------------------------------------------------
/v4 (alldebrid)/frontend/src/pages/assets/bitcoin.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Wamy-Dev/LeechersParadise/ab9d6493f7e39995c6b84fd54e7b9bcc75a3246e/v4 (alldebrid)/frontend/src/pages/assets/bitcoin.png
--------------------------------------------------------------------------------
/v4 (alldebrid)/frontend/src/pages/assets/etherium.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Wamy-Dev/LeechersParadise/ab9d6493f7e39995c6b84fd54e7b9bcc75a3246e/v4 (alldebrid)/frontend/src/pages/assets/etherium.png
--------------------------------------------------------------------------------
/v4 (alldebrid)/frontend/src/pages/assets/monero.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Wamy-Dev/LeechersParadise/ab9d6493f7e39995c6b84fd54e7b9bcc75a3246e/v4 (alldebrid)/frontend/src/pages/assets/monero.png
--------------------------------------------------------------------------------
/v4 (alldebrid)/frontend/src/pages/assets/paypal.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Wamy-Dev/LeechersParadise/ab9d6493f7e39995c6b84fd54e7b9bcc75a3246e/v4 (alldebrid)/frontend/src/pages/assets/paypal.png
--------------------------------------------------------------------------------
/v4 (alldebrid)/frontend/src/pages/assets/piracy_logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Wamy-Dev/LeechersParadise/ab9d6493f7e39995c6b84fd54e7b9bcc75a3246e/v4 (alldebrid)/frontend/src/pages/assets/piracy_logo.png
--------------------------------------------------------------------------------
/v4 (alldebrid)/frontend/src/pages/assets/premium.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Wamy-Dev/LeechersParadise/ab9d6493f7e39995c6b84fd54e7b9bcc75a3246e/v4 (alldebrid)/frontend/src/pages/assets/premium.png
--------------------------------------------------------------------------------
/v4 (alldebrid)/frontend/src/pages/assets/stripe.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Wamy-Dev/LeechersParadise/ab9d6493f7e39995c6b84fd54e7b9bcc75a3246e/v4 (alldebrid)/frontend/src/pages/assets/stripe.png
--------------------------------------------------------------------------------
/v4 (alldebrid)/frontend/src/pages/assets/wamy.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Wamy-Dev/LeechersParadise/ab9d6493f7e39995c6b84fd54e7b9bcc75a3246e/v4 (alldebrid)/frontend/src/pages/assets/wamy.png
--------------------------------------------------------------------------------
/v4 (alldebrid)/frontend/src/pages/donate.tsx:
--------------------------------------------------------------------------------
1 | import { createTheme, ThemeProvider} from '@mui/material/styles';
2 | import Box from '@mui/material/Box';
3 | import CssBaseline from '@mui/material/CssBaseline';
4 | import Button from '@mui/material/Button';
5 | import Divider from '@mui/material/Divider';
6 | import { Link } from 'react-router-dom'
7 | import Monero from './assets/monero.png';
8 | import Bitcoin from './assets/bitcoin.png';
9 | import Etherium from './assets/etherium.png';
10 | import wamy from './assets/wamy.png';
11 | import {CopyToClipboard} from 'react-copy-to-clipboard';
12 | import { BrowserView } from 'react-device-detect';
13 |
14 | const NewthemeDark = createTheme({
15 | palette: {
16 | mode: "dark",
17 | background: {
18 | default: "#333333"
19 | },
20 | primary: {
21 | main: '#5E2BE2',
22 | },
23 | secondary: {
24 | main: '#50c878',
25 | },
26 | text: {
27 | primary: "#ffffff"
28 | },
29 | },
30 | typography: {
31 | fontFamily: [
32 | 'Lato',
33 | 'sans-serif',
34 | ].join(','),
35 | },
36 | });
37 | export default function About() {
38 | return (
39 |
40 |
41 |
42 |
43 |
44 |
Support LeechersParadise
45 |
46 |
47 |
Hi!
48 |
Thank you for considering to support our project.
49 |
If you enjoy this service, donate today, so we can use 100% of your support to further develop this project.
50 |
51 |
52 |
53 |
You can choose to support us via any of these options.
54 |
55 |
Monero
56 |
57 |
58 | 46XuKBQPLjrfdoKB7oXRyo2dZETJFF7xmSparT7iLjSJ14KohnyCKVeTzo7sdC2A8HUty9PHQyUjpJkhGm9kLVc4HhUjE6q
59 |
60 |
61 | Copy XMR Address
63 |
64 |
65 |
Bitcoin
66 |
67 |
68 | bc1q9x28smqehp4semejjkfs2slr8gugej0fpw5rdx
69 |
70 |
71 | Copy BTC Address
73 |
74 |
75 |
Etherium
76 |
77 |
78 | 0xe4E96A7833c1A43187A88870566a83e37386BA25
79 |
80 |
81 | Copy ETH Address
85 |
86 |
87 |
PayPal
88 |
89 |
101 |
102 |
If you have any questions or problems should occur, please contact contact@leechersparadise.com or message us on our Discord: Here .
103 |
Don't want to donate but still want to support our cause? Then you should consider signing up to premium.
104 |
105 |
106 |
107 |
108 | )
109 | }
--------------------------------------------------------------------------------
/v4 (alldebrid)/frontend/src/pages/forgot.tsx:
--------------------------------------------------------------------------------
1 | import { createTheme, ThemeProvider} from '@mui/material/styles';
2 | import Box from '@mui/material/Box';
3 | import CssBaseline from '@mui/material/CssBaseline';
4 | import ClickAwayListener from '@mui/material/ClickAwayListener';
5 | import * as React from 'react';
6 | import Tooltip from '@mui/material/Tooltip';
7 | import Button from '@mui/material/Button';
8 | import TextField from '@mui/material/TextField';
9 | import { sendPasswordResetEmail } from "firebase/auth";
10 | import { fireAuth } from '../config/firebase.config';
11 | import Container from '@mui/material/Container';
12 | import Dialog from '@mui/material/Dialog';
13 | import DialogActions from '@mui/material/DialogActions';
14 | import DialogContent from '@mui/material/DialogContent';
15 | import DialogContentText from '@mui/material/DialogContentText';
16 | import DialogTitle from '@mui/material/DialogTitle';
17 | import Slide from '@mui/material/Slide';
18 | import { TransitionProps } from '@mui/material/transitions';
19 | const NewthemeDark = createTheme({
20 | palette: {
21 | mode: "dark",
22 | background: {
23 | default: "#333333"
24 | },
25 | primary: {
26 | main: '#5E2BE2',
27 | },
28 | secondary: {
29 | main: '#50c878',
30 | },
31 | text: {
32 | primary: "#ffffff"
33 | },
34 | },
35 | typography: {
36 | fontFamily: [
37 | 'Lato',
38 | 'sans-serif',
39 | ].join(','),
40 | },
41 | });
42 | const Transition = React.forwardRef(function Transition(
43 | props: TransitionProps & {
44 | children: React.ReactElement;
45 | },
46 | ref: React.Ref,
47 | ) {
48 | return ;
49 | });
50 | export default function Forgot() {
51 | const [open, setOpen] = React.useState(false);
52 | const [dopen, setdOpen] = React.useState(false);
53 | const handleTooltipClose = () => {
54 | setOpen(false);
55 | };
56 | const handledClose = () => {
57 | setdOpen(false);
58 | };
59 | const handleSubmit = (event: React.FormEvent) => {
60 | event.preventDefault()
61 | const form = event.currentTarget
62 | const data = new FormData(event.currentTarget);
63 | const email = data.get('email') as string
64 | sendPasswordResetEmail(fireAuth, email)
65 | .then(() => {
66 | form.reset();
67 | setdOpen(true);
68 | })
69 | .catch(error => {
70 | setOpen(true);
71 | })
72 | }
73 | return (
74 |
75 |
76 |
77 |
78 |
79 |
80 |
Forgot Password
81 |
82 |
Here you can receive your password again. Please enter your email that you use to login, to get your password reset.
83 |
84 |
85 |
87 |
98 | Submit
99 |
100 |
107 | {"Password reset sent! 📬"}
108 |
109 |
110 | Please check your email for the reset link.
111 |
112 |
113 |
114 | Close
115 |
116 |
117 |
118 |
119 |
120 |
121 |
122 |
123 | )
124 | }
--------------------------------------------------------------------------------
/v4 (alldebrid)/frontend/src/pages/premium.js:
--------------------------------------------------------------------------------
1 | import * as React from 'react';
2 | import { createTheme, ThemeProvider} from '@mui/material/styles';
3 | import Box from '@mui/material/Box';
4 | import Button from '@mui/material/Button';
5 | import Link from "@mui/material/Link";
6 | import Card from '@mui/material/Card';
7 | import CardActions from '@mui/material/CardActions';
8 | import CardContent from '@mui/material/CardContent';
9 | import CardHeader from '@mui/material/CardHeader';
10 | import CssBaseline from '@mui/material/CssBaseline';
11 | import Grid from '@mui/material/Grid';
12 | import StarIcon from '@mui/icons-material/StarBorder';
13 | import Typography from '@mui/material/Typography';
14 | import GlobalStyles from '@mui/material/GlobalStyles';
15 | import Container from '@mui/material/Container';
16 | import PayPalLogo from './assets/paypal.png'
17 | import StripeLogo from './assets/stripe.png'
18 | const NewthemeDark = createTheme({
19 | palette: {
20 | mode: "dark",
21 | background: {
22 | default: "#333333"
23 | },
24 | primary: {
25 | main: '#5E2BE2',
26 | },
27 | secondary: {
28 | main: '#50c878',
29 | },
30 | text: {
31 | primary: "#ffffff"
32 | },
33 | },
34 | typography: {
35 | fontFamily: [
36 | 'Lato',
37 | 'sans-serif',
38 | ].join(','),
39 | },
40 | });
41 | const tiers = [
42 | {
43 | title: 'Free',
44 | subheader: 'Anonymous User',
45 | price: '$0',
46 | description: [
47 | 'All features',
48 | 'Download 10 files/day',
49 | '50gb File Cap'
50 | ],
51 | buttonText: 'Default',
52 | buttonVariant: 'disabled',
53 | },
54 | {
55 | title: 'Premium',
56 | subheader: 'Unlocks Premium',
57 | link: 'premium',
58 | price: '$2/month',
59 | action: "https://api.leechersparadise.com/create-checkout-session",
60 | method: "POST",
61 | description: [
62 | 'All features',
63 | 'Unlimited Downloads',
64 | 'Unlimited File Sizes',
65 | 'Priority Discord Support',
66 | 'Download Manager Access'
67 | ],
68 | buttonText: 'Buy Monthly',
69 | buttonVariant: 'contained',
70 | },
71 | {
72 | title: 'Donate',
73 | subheader: 'Supports Us',
74 | link: 'donate',
75 | price: '♾',
76 | action: "donate",
77 | buttonid: "donatebutton",
78 | method: "GET",
79 | description: [
80 | 'Support LeechersParadise',
81 | 'Priority Discord Support',
82 | 'Your name in source code'
83 | ],
84 | buttonText: 'Support Here',
85 | buttonVariant: 'contained',
86 | },
87 | ];
88 | function PricingContent() {
89 | return (
90 |
91 |
92 |
93 |
94 |
101 | Premium
102 |
103 |
104 | Not only does this help support us by providing for our monthly costs but you also get perks by signing up for premium.
105 |
106 |
107 | Please sign up using a valid email! If you already have an acount, do not purchase using the same email as your previous account! If you would like to purchase using a different method please contact us here.
108 |
109 |
110 | {/* End hero unit */}
111 |
112 |
113 |
115 |
116 |
117 |
118 | );
119 | }
120 | export default function Premium() {
121 | return (
122 |
123 |
124 |
125 | )
126 | }
127 |
--------------------------------------------------------------------------------
/v4 (alldebrid)/frontend/src/pages/success.tsx:
--------------------------------------------------------------------------------
1 | import { createTheme, ThemeProvider} from '@mui/material/styles';
2 | import Box from '@mui/material/Box';
3 | import CssBaseline from '@mui/material/CssBaseline';
4 | import Typography from '@mui/material/Typography';
5 | import Container from '@mui/material/Container';
6 | const NewthemeDark = createTheme({
7 | palette: {
8 | mode: "dark",
9 | background: {
10 | default: "#333333"
11 | },
12 | primary: {
13 | main: '#5E2BE2',
14 | },
15 | secondary: {
16 | main: '#50c878',
17 | },
18 | text: {
19 | primary: "#ffffff"
20 | },
21 | },
22 | typography: {
23 | fontFamily: [
24 | 'Lato',
25 | 'sans-serif',
26 | ].join(','),
27 | },
28 | });
29 | export default function Success() {
30 | return (
31 |
32 |
33 |
34 |
35 | Purchase Success!
36 |
37 |
38 |
39 | We have successfully purchased your premium order!
40 | Please check the email you used to purchase for your credentials. If there is something wrong with your purchase please email: contact@leechersparadise.com for help, or message a dev at our Discord: Here .
41 | We hope you use your account well, and enjoy the benefits that come with having premium!
42 | Thank you again for supporting LeechersParadise!
43 | -Love, The Devs
44 | You may now log in using your credentials Here , or just return to the main page, Here .
45 |
46 |
47 |
48 |
49 |
50 | )
51 | }
--------------------------------------------------------------------------------
/v4 (alldebrid)/frontend/src/pages/support.tsx:
--------------------------------------------------------------------------------
1 | import { createTheme, ThemeProvider} from '@mui/material/styles';
2 | import Box from '@mui/material/Box';
3 | import CssBaseline from '@mui/material/CssBaseline';
4 | import Divider from '@mui/material/Divider';
5 | import { Link } from 'react-router-dom';
6 | const NewthemeDark = createTheme({
7 | palette: {
8 | mode: "dark",
9 | background: {
10 | default: "#333333"
11 | },
12 | primary: {
13 | main: '#5E2BE2',
14 | },
15 | secondary: {
16 | main: '#50c878',
17 | },
18 | text: {
19 | primary: "#ffffff"
20 | },
21 | },
22 | typography: {
23 | fontFamily: [
24 | 'Lato',
25 | 'sans-serif',
26 | ].join(','),
27 | },
28 | });
29 | export default function Support() {
30 | return (
31 |
32 |
33 |
34 |
35 |
36 |
Contact
37 |
38 |
41 |
42 |
FAQ
43 |
44 |
45 |
Why LeechersParadise?
46 |
Like a lot of my other piracy oriented projects such as Rezi , I want to make things free and not have to pay a lot of money to companies who don't need it.
47 | LeechersParadise allows you to download hoster links and torrents without having to pay for a monthly subscription all for free and anonymously.
48 |
49 |
Is Premium required to use LeechersParadise?
50 |
No. LeechersParadise is a free project that allows any anonymous user to download any hoster link and torrent for free without charge. As a non-premium user, you are limited to 10 downloads every 24 hours.
51 | You can bypass this by purchasing a premium account for only $2 a month. This price is cheap and allows unlimited downloads. This subscription goes into supporting the project and crowdfunding the server costs and account
52 | costs. If you are interested you can purchase here.
53 |
54 |
55 |
Who made LeechersParadise?
56 |
Hi there! I am Wamy , the sole developer of LeechersParadise! This project was originally started by another web developer but then I took over and I actively
57 | maintain the project now. I also am responsible for paying the bills and actively fixing bugs. Over the course of this project, there have been over 300 commits, and over 45 hours of active coding time put into this project.
58 | I actively strive to make this project as good and as usable as it can be! If you want to learn more about me, you can go to my personal website here .
59 |
60 |
61 |
What data do you collect?
62 |
LeechersParadise does not store any of the links you download. We do collect your IP for the 24 hours as that is how we track how many downloads you have. This is only stored every 24 hours that you use
63 | the service. LeechersParadise is also backed by SimpleAnalytics as a way to view analytics for the website which is privacy oriented. You can read more about the SimpleAnalytics here .
64 | You can read LeechersParadise Privacy Policy here along with the Terms and Conditions, Cookie Policy and Fair Use Policy.
65 |
66 |
67 |
Why does my link not work?
68 |
There are many reasons why a link may not work. The most common reason is that the hoster is not valid on our service and we cannot download it. You may use a different hoster or use a different service. Some hosters such as RapidGator or TurboBit are only allowed a certain
69 | download quota every 24 hours, so if it gives you an error, LeechersParadise has surpassed the quota. You can try again at a later time, or use a different hoster or different service. If you are using a torrent, it may be that the torrent is not valid or the tracker is down.
70 |
71 |
72 |
My download stops midway or never even starts.
73 |
There are many reasons a download has stopped midway. Due to the way we serve files, our memory fills up and needs to be cleared once every 4 hours, and this kills all downloads in progress at that time, so if that happens, please just redownload again. The best solution for this problem in general is to just try again.
74 | If you are using a mobile device, LeechersParadise does not work very well with large files and mobile devices. Please use a PC or download smaller files. The best browser for iOS devices is Safari, for Android devices is Chrome. For PCs the best browser is Brave or Chrome and for Mac is Safari.
75 |
76 |
77 |
Can I download multiple links at the same time?
78 |
No. The web interface does not allow for downloading multiple links at the same time, even in different tabs. If you are a premium member you have access to direct download links, which allow you to
79 | use those generated links inside Jdownloader2, Internet Download Manager, PyLoad or other similar download managers. The button is available next to the normal download button and it will copy that link to your clipboard to be used elsewhere. The link is
80 | password protected and requires you to have a premium account to download. When asked for credentials, just use the same login that you do for the website. If you are not a premium member, you may sign up to gain this feature here.
81 |
82 |
83 |
I get an error saying "Max downloads reached for this hoster" even though I am premium. Why?
84 |
Unfortunately, due to our debrid services, they place a limit on how much traffic can be used on each hoster. This serves as a sort of safety net for them, so they don't get banned. This means that since LeechersParadise
85 | relies on these services, we have to play by their rules. LeechersParadise owns multiple debrid accounts to allow for the greatest amount of traffic availability. When one account runs out of traffic usage, we switch to the next
86 | one and so on until we have exhausted all accounts limits. Every 24 hours, the usage gets reset so it's not out forever. We are always expanding and getting more and more accounts as LeechersParadise grows.
87 |
88 |
89 |
90 |
91 |
92 |
93 | )
94 | }
--------------------------------------------------------------------------------
/v4 (alldebrid)/frontend/src/pages/userpanel.tsx:
--------------------------------------------------------------------------------
1 | import * as React from "react";
2 | import Avatar from "@mui/material/Avatar";
3 | import Button from "@mui/material/Button";
4 | import CssBaseline from "@mui/material/CssBaseline";
5 | import TextField from "@mui/material/TextField";
6 | import FormControlLabel from "@mui/material/FormControlLabel";
7 | import Checkbox from "@mui/material/Checkbox";
8 | import { Link } from "react-router-dom";
9 | import Grid from "@mui/material/Grid";
10 | import Box from "@mui/material/Box";
11 | import LockOutlinedIcon from "@mui/icons-material/LockOutlined";
12 | import Typography from "@mui/material/Typography";
13 | import Container from "@mui/material/Container";
14 | import Tooltip from "@mui/material/Tooltip";
15 | import ClickAwayListener from "@mui/material/ClickAwayListener";
16 | import { createTheme, ThemeProvider } from "@mui/material/styles";
17 | import { collection, query, where, getDocs } from "firebase/firestore";
18 | import { signInWithEmailAndPassword } from "@firebase/auth";
19 | import { fireAuth } from "../config/firebase.config";
20 | import { useAuthUser } from "../hooks/AuthUser";
21 | import { fireStore } from "../config/firebase.config";
22 | import PersonOutline from "@mui/icons-material/PersonOutline";
23 | const NewthemeDark = createTheme({
24 | palette: {
25 | mode: "dark",
26 | background: {
27 | default: "#333333",
28 | },
29 | primary: {
30 | main: "#5E2BE2",
31 | },
32 | secondary: {
33 | main: "#50c878",
34 | },
35 | text: {
36 | primary: "#ffffff",
37 | },
38 | },
39 | typography: {
40 | fontFamily: ["Lato", "sans-serif"].join(","),
41 | },
42 | });
43 | function Copyright(props: any) {
44 | return (
45 |
51 | {""}
52 |
53 | LeechersParadise
54 | {" "}
55 | {new Date().getFullYear()}
56 | {" - Present"}
57 |
58 | );
59 | }
60 | export default function UserPanel() {
61 | const [open, setOpen] = React.useState(false);
62 | const [customer, setCustomer] = React.useState("");
63 | const user = useAuthUser();
64 | const handleTooltipClose = () => {
65 | setOpen(false);
66 | };
67 | async function handleCustomer(email) {
68 | const q = query(
69 | collection(fireStore, "users"),
70 | where("email", "==", email)
71 | );
72 | const querySnapshot = await getDocs(q);
73 | querySnapshot.forEach((doc) => {
74 | // doc.data() is never undefined for query doc snapshots
75 | const data = doc.data();
76 | const customer = data.customer as string;
77 | setCustomer(customer);
78 | });
79 | }
80 | const handleSubmit = (event: React.FormEvent) => {
81 | const data = new FormData(event.currentTarget);
82 | const user = data.get("user") as string;
83 | const password = data.get("password") as string;
84 | signInWithEmailAndPassword(fireAuth, user, password).catch((error) => {
85 | setOpen(true);
86 | });
87 | event.preventDefault();
88 | };
89 | if (user) {
90 | const email = user.email;
91 | handleCustomer(email);
92 | return (
93 |
94 |
95 |
96 |
104 |
105 |
106 |
107 |
108 | Welcome to LeechersParadise:
109 |
110 |
120 |
121 |
129 |
147 |
148 |
156 |
157 | Change Email
158 |
159 |
160 |
161 |
162 | );
163 | } else {
164 | return (
165 |
166 |
167 |
168 |
169 |
177 |
178 |
179 |
180 |
181 | Sign In
182 |
183 |
189 |
198 |
207 | }
209 | label="Remember me"
210 | />
211 |
222 |
228 | Sign In
229 |
230 |
231 |
232 |
233 |
234 | Forgot password?
235 |
236 |
237 |
238 |
239 |
240 |
241 |
242 |
243 |
244 | );
245 | }
246 | }
247 |
--------------------------------------------------------------------------------
/v4 (alldebrid)/frontend/src/react-app-env.d.ts:
--------------------------------------------------------------------------------
1 | ///
2 | ///
3 | ///
4 | ///
5 |
6 | declare namespace NodeJS {
7 | interface ProcessEnv {
8 | readonly NODE_ENV: "development" | "production" | "test";
9 | readonly PUBLIC_URL: string;
10 | }
11 | }
12 |
13 | declare module "*.avif" {
14 | const src: string;
15 | export default src;
16 | }
17 |
18 | declare module "*.bmp" {
19 | const src: string;
20 | export default src;
21 | }
22 |
23 | declare module "*.gif" {
24 | const src: string;
25 | export default src;
26 | }
27 |
28 | declare module "*.jpg" {
29 | const src: string;
30 | export default src;
31 | }
32 |
33 | declare module "*.jpeg" {
34 | const src: string;
35 | export default src;
36 | }
37 |
38 | declare module "*.png" {
39 | const src: string;
40 | export default src;
41 | }
42 |
43 | declare module "*.webp" {
44 | const src: string;
45 | export default src;
46 | }
47 |
48 | declare module "*.svg" {
49 | import * as React from "react";
50 |
51 | export const ReactComponent: React.FunctionComponent<
52 | React.SVGProps & { title?: string }
53 | >;
54 |
55 | const src: string;
56 | export default src;
57 | }
58 |
59 | declare module "*.module.css" {
60 | const classes: { readonly [key: string]: string };
61 | export default classes;
62 | }
63 |
64 | declare module "*.module.scss" {
65 | const classes: { readonly [key: string]: string };
66 | export default classes;
67 | }
68 |
69 | declare module "*.module.sass" {
70 | const classes: { readonly [key: string]: string };
71 | export default classes;
72 | }
73 |
--------------------------------------------------------------------------------
/v4 (alldebrid)/frontend/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "compilerOptions": {
3 | "target": "es2017",
4 | "lib": [
5 | "dom",
6 | "dom.iterable",
7 | "esnext"
8 | ],
9 | "allowJs": true,
10 | "skipLibCheck": true,
11 | "esModuleInterop": true,
12 | "allowSyntheticDefaultImports": true,
13 | "strict": true,
14 | "forceConsistentCasingInFileNames": true,
15 | "noFallthroughCasesInSwitch": true,
16 | "module": "esnext",
17 | "moduleResolution": "node",
18 | "resolveJsonModule": true,
19 | "isolatedModules": true,
20 | "noEmit": true,
21 | "jsx": "react-jsx",
22 | "noImplicitReturns": true,
23 | "noImplicitAny": false
24 |
25 | },
26 | "include": [
27 | "src"
28 | ]
29 | }
30 |
--------------------------------------------------------------------------------