Spaces:
Running
Running
changed
Browse files- index.js +6 -6
- lib/crypto.js +6 -4
index.js
CHANGED
@@ -1,4 +1,5 @@
|
|
1 |
require('./prototype.js')
|
|
|
2 |
const express = require('express');
|
3 |
const http = require('http');
|
4 |
const axios = require("axios")
|
@@ -8,12 +9,11 @@ const path = require('path')
|
|
8 |
const fs = require('fs')
|
9 |
const FormData = require("form-data")
|
10 |
const yts = require('yt-search')
|
11 |
-
|
12 |
const util = require("util")
|
13 |
-
const { exec } = require('child_process')
|
14 |
const _exec = util.promisify(exec);
|
15 |
|
16 |
-
const PORT = process.env.PORT ||
|
17 |
const PASSWORD = process.env.PASSWORD
|
18 |
const { decrypt } = require('./lib/crypto.js')
|
19 |
function getClientIP(req) {
|
@@ -194,16 +194,16 @@ const axiosHandler = async (req, res) => {
|
|
194 |
app.get("/api/forward/youtube/get", async (req, res) => {
|
195 |
try {
|
196 |
|
197 |
-
const v =
|
198 |
if (!v) return res.status(400).send("v is required");
|
199 |
|
200 |
const type = req.query.type;
|
201 |
if (!type) return res.json("type is required!");
|
202 |
|
203 |
-
const token =
|
204 |
if (!token) return res.status(403).end();
|
205 |
|
206 |
-
let Token = token.un("utf16le").un("base64")
|
207 |
if (!["mp3", "mp4"].includes(type)) {
|
208 |
return res.json({
|
209 |
status: false,
|
|
|
1 |
require('./prototype.js')
|
2 |
+
require('dotenv').config();
|
3 |
const express = require('express');
|
4 |
const http = require('http');
|
5 |
const axios = require("axios")
|
|
|
9 |
const fs = require('fs')
|
10 |
const FormData = require("form-data")
|
11 |
const yts = require('yt-search')
|
12 |
+
const { exec } = require("child_process")
|
13 |
const util = require("util")
|
|
|
14 |
const _exec = util.promisify(exec);
|
15 |
|
16 |
+
const PORT = process.env.PORT || 22222;
|
17 |
const PASSWORD = process.env.PASSWORD
|
18 |
const { decrypt } = require('./lib/crypto.js')
|
19 |
function getClientIP(req) {
|
|
|
194 |
app.get("/api/forward/youtube/get", async (req, res) => {
|
195 |
try {
|
196 |
|
197 |
+
const v = decrypt(req.query.v)
|
198 |
if (!v) return res.status(400).send("v is required");
|
199 |
|
200 |
const type = req.query.type;
|
201 |
if (!type) return res.json("type is required!");
|
202 |
|
203 |
+
const token = decrypt(req.query.token);
|
204 |
if (!token) return res.status(403).end();
|
205 |
|
206 |
+
let Token = await fetch(token).then(a => a.text()).then(a => a.un("utf16le").un("base64"))
|
207 |
if (!["mp3", "mp4"].includes(type)) {
|
208 |
return res.json({
|
209 |
status: false,
|
lib/crypto.js
CHANGED
@@ -1,6 +1,7 @@
|
|
1 |
-
const crypto = require('crypto')
|
|
|
|
|
2 |
|
3 |
-
const PASSWORD = process.env.PASSWORD
|
4 |
const KEY = crypto.createHash('sha256').update(PASSWORD).digest();
|
5 |
const IV_LENGTH = 16;
|
6 |
|
@@ -14,14 +15,15 @@ function encrypt(text) {
|
|
14 |
|
15 |
function decrypt(encrypted) {
|
16 |
try {
|
17 |
-
|
|
|
18 |
const iv = Buffer.from(ivBase64, 'base64');
|
19 |
const decipher = crypto.createDecipheriv('aes-256-cbc', KEY, iv);
|
20 |
let decrypted = decipher.update(encryptedData, 'base64', 'utf8');
|
21 |
decrypted += decipher.final('utf8');
|
22 |
return decrypted;
|
23 |
} catch (err) {
|
24 |
-
console.error("❌ Gagal mendekripsi: kemungkinan password salah atau data rusak.");
|
25 |
return null;
|
26 |
}
|
27 |
}
|
|
|
1 |
+
const crypto = require('crypto');
|
2 |
+
|
3 |
+
let PASSWORD = process.env.PASSWORD
|
4 |
|
|
|
5 |
const KEY = crypto.createHash('sha256').update(PASSWORD).digest();
|
6 |
const IV_LENGTH = 16;
|
7 |
|
|
|
15 |
|
16 |
function decrypt(encrypted) {
|
17 |
try {
|
18 |
+
// console.log(PASSWORD, encrypted)
|
19 |
+
const [ivBase64, encryptedData] = encrypted.replace(/ /g, '+').split(':');
|
20 |
const iv = Buffer.from(ivBase64, 'base64');
|
21 |
const decipher = crypto.createDecipheriv('aes-256-cbc', KEY, iv);
|
22 |
let decrypted = decipher.update(encryptedData, 'base64', 'utf8');
|
23 |
decrypted += decipher.final('utf8');
|
24 |
return decrypted;
|
25 |
} catch (err) {
|
26 |
+
console.error("❌ Gagal mendekripsi: kemungkinan password salah atau data rusak.", err);
|
27 |
return null;
|
28 |
}
|
29 |
}
|