├── 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 | 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 | 18 |
19 |
20 |
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 | 78 | {user && 79 | } 85 | 86 | 87 | 88 | 89 |
90 | 100 | Download 101 | Torrent 102 | About 103 | User Panel 104 | Status 105 | Donate 106 | Premium 107 | 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 |
86 | 87 | {/*Donation value*/} 88 | setFormState({...formState, dollarvalue: ev.target.value})} 89 | type="number" 90 | value={formState.dollarvalue} 91 | id="donation-value" 92 | label="Donation Value" 93 | variant="outlined" 94 | sx={{mr:1}} 95 | /> 96 | {/*Donation goal*/} 97 | setFormState({...formState, dollargoal: ev.target.value})} 98 | type="number" 99 | value={formState.dollargoal} 100 | id="donation-goal" 101 | label="Donation Goal" 102 | variant="outlined" 103 | sx={{mr:1}} 104 | /> 105 | {/*API key*/} 106 | setFormState({...formState, apiKey: ev.target.value})} 107 | type="text" 108 | value={formState.apiKey} 109 | id="api-key" label="Apikey" 110 | variant="outlined" 111 | /> 112 | 113 | 114 | 120 | 121 |
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 | r/monero 59 | 60 |

46XuKBQPLjrfdoKB7oXRyo2dZETJFF7xmSparT7iLjSJ14KohnyCKVeTzo7sdC2A8HUty9PHQyUjpJkhGm9kLVc4HhUjE6q

61 |
62 | 63 | 66 | 67 |

Bitcoin

68 | r/bitcoin 69 | 70 |

bc1q9x28smqehp4semejjkfs2slr8gugej0fpw5rdx

71 |
72 | 73 | 76 | 77 |

Etherium

78 | r/bitcoin 79 | 80 |

0xe4E96A7833c1A43187A88870566a83e37386BA25

81 |
82 | 83 | 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 | wamy 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 | 99 | 100 | 107 | {"Password reset sent! 📬"} 108 | 109 | 110 | Please check your email for the reset link. 111 | 112 | 113 | 114 | 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 |
162 | 169 |
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 |
133 | 139 | 146 |
147 |
148 | 156 | 157 | 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 | 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 | 25 |
26 |
27 |
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 | 78 | {user && 79 | } 85 | 86 | 87 | 88 | 89 |
90 | 100 | Download 101 | Torrent 102 | About 103 | User Panel 104 | Website Status 105 | Donate 106 | Premium 107 | 108 | 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 |
86 | 87 | {/*Donation value*/} 88 | setFormState({...formState, dollarvalue: ev.target.value})} 89 | type="number" 90 | value={formState.dollarvalue} 91 | id="donation-value" 92 | label="Donation Value" 93 | variant="outlined" 94 | sx={{mr:1}} 95 | /> 96 | {/*Donation goal*/} 97 | setFormState({...formState, dollargoal: ev.target.value})} 98 | type="number" 99 | value={formState.dollargoal} 100 | id="donation-goal" 101 | label="Donation Goal" 102 | variant="outlined" 103 | sx={{mr:1}} 104 | /> 105 | {/*API key*/} 106 | setFormState({...formState, apiKey: ev.target.value})} 107 | type="text" 108 | value={formState.apiKey} 109 | id="api-key" label="Apikey" 110 | variant="outlined" 111 | /> 112 | 113 | 114 | 120 | 121 |
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 | r/monero 59 | 60 |

46XuKBQPLjrfdoKB7oXRyo2dZETJFF7xmSparT7iLjSJ14KohnyCKVeTzo7sdC2A8HUty9PHQyUjpJkhGm9kLVc4HhUjE6q

61 |
62 | 63 | 66 | 67 |

Bitcoin

68 | r/bitcoin 69 | 70 |

bc1q9x28smqehp4semejjkfs2slr8gugej0fpw5rdx

71 |
72 | 73 | 76 | 77 |

Etherium

78 | r/bitcoin 79 | 80 |

0xe4E96A7833c1A43187A88870566a83e37386BA25

81 |
82 | 83 | 88 | 89 |

PayPal

90 |
91 |
92 | wamy 93 |

If you don't like crypto, PayPal is an option.

94 | 95 | 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 | 99 | 100 | 107 | {"Password reset sent! 📬"} 108 | 109 | 110 | Please check your email for the reset link. 111 | 112 | 113 | 114 | 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 |
162 | 169 |
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 |
133 | 139 | 146 |
147 |
148 | 156 | 157 | 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 | 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 |
    19 | 21 |
  • 22 |
  • 23 |
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 | 30 |
31 |
32 |
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 | 80 | {user && 81 | } 87 | 88 | 89 | 90 | 91 |
92 | 102 | Download 103 | Torrent 104 | About 105 | User Panel 106 | Support 107 | Hoster Status 108 | Website Status 109 | Speed Test 110 | Donate 111 | Premium 112 | 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 |
86 | 87 | {/*Donation value*/} 88 | setFormState({...formState, dollarvalue: ev.target.value})} 89 | type="number" 90 | value={formState.dollarvalue} 91 | id="donation-value" 92 | label="Donation Value" 93 | variant="outlined" 94 | sx={{mr:1}} 95 | /> 96 | {/*Donation goal*/} 97 | setFormState({...formState, dollargoal: ev.target.value})} 98 | type="number" 99 | value={formState.dollargoal} 100 | id="donation-goal" 101 | label="Donation Goal" 102 | variant="outlined" 103 | sx={{mr:1}} 104 | /> 105 | {/*API key*/} 106 | setFormState({...formState, apiKey: ev.target.value})} 107 | type="text" 108 | value={formState.apiKey} 109 | id="api-key" label="Apikey" 110 | variant="outlined" 111 | /> 112 | 113 | 114 | 120 | 121 |
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 | r/monero 57 | 58 |

46XuKBQPLjrfdoKB7oXRyo2dZETJFF7xmSparT7iLjSJ14KohnyCKVeTzo7sdC2A8HUty9PHQyUjpJkhGm9kLVc4HhUjE6q

59 |
60 | 61 | 64 | 65 |

Bitcoin

66 | r/bitcoin 67 | 68 |

bc1q9x28smqehp4semejjkfs2slr8gugej0fpw5rdx

69 |
70 | 71 | 74 | 75 |

Etherium

76 | r/bitcoin 77 | 78 |

0xe4E96A7833c1A43187A88870566a83e37386BA25

79 |
80 | 81 | 86 | 87 |

PayPal

88 |
89 |
90 | wamy 91 |

If you don't like crypto, PayPal is an option.

92 | 93 | 99 | 100 |
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 | 99 | 100 | 107 | {"Password reset sent! 📬"} 108 | 109 | 110 | Please check your email for the reset link. 111 | 112 | 113 | 114 | 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 |
39 |

For questions or concerns please send an email to contact@leechersparadise.com or join our Discord and open a support ticket Here.

40 |
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 |
133 | 139 | 146 |
147 |
148 | 156 | 157 | 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 | 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 | --------------------------------------------------------------------------------