feat(ph): pornhub için cookie yönetimi ekle

Pornhub video indirmelerinde yetkilendirme için cookie dosyası yönetimi
eklendi. Kullanıcılar arayüz üzerinden Netscape formatındaki cookies.txt
içeriğini kaydedebilir ve yönetebilir.

- Backend API /api/pornhub/cookies endpointleri eklendi
- Ayarlar sayfasına Pornhub sekmesi eklendi
- Cookie dosyası kontrolü ve yt-dlp entegrasyonu sağlandı
- Rabbit ikonu yenilendi ve boyutu artırıldı
- Docker portu 3005 olarak değiştirildi
This commit is contained in:
2025-12-27 20:02:35 +03:00
parent b63bd41973
commit 8bf08880fd
6 changed files with 193 additions and 14 deletions

View File

@@ -78,6 +78,11 @@ const YT_COOKIES_PATH =
process.env.YT_DLP_COOKIES ||
process.env.YT_DLP_COOKIE_FILE ||
path.join(CACHE_DIR, "yt_cookies.txt");
const PH_COOKIES_PATH =
process.env.PH_DLP_COOKIES ||
process.env.PH_DLP_COOKIE_FILE ||
process.env.PORNHUB_COOKIES ||
path.join(CACHE_DIR, "ph_cookies.txt");
const YT_SETTINGS_PATH = path.join(CACHE_DIR, "yt_settings.json");
const YT_DEFAULT_RESOLUTION = "1080p";
const YT_ALLOWED_RESOLUTIONS = new Set([
@@ -963,6 +968,9 @@ function launchYoutubeJob(job) {
function launchPornhubJob(job) {
const binary = getYtDlpBinary();
const cookieFile =
(PH_COOKIES_PATH && fs.existsSync(PH_COOKIES_PATH) && PH_COOKIES_PATH) ||
null;
const args = [
"-f",
"bestvideo+bestaudio/best",
@@ -972,6 +980,7 @@ function launchPornhubJob(job) {
"--write-info-json",
"--concurrent-fragments",
"10",
...(cookieFile ? ["--cookies", cookieFile] : []),
job.url
];
@@ -980,7 +989,7 @@ function launchPornhubJob(job) {
args,
logs: [],
jsRuntime: null,
cookies: null,
cookies: cookieFile,
extractorArgs: null,
resolution: null,
onlyAudio: false,
@@ -6372,6 +6381,50 @@ app.post("/api/youtube/cookies", requireAuth, (req, res) => {
}
});
// --- 🎫 Pornhub cookies yönetimi ---
app.get("/api/pornhub/cookies", requireAuth, (req, res) => {
try {
if (!PH_COOKIES_PATH || !fs.existsSync(PH_COOKIES_PATH)) {
return res.json({ hasCookies: false, cookies: null, updatedAt: null });
}
const stat = fs.statSync(PH_COOKIES_PATH);
const size = stat.size;
if (size > 20000) {
return res.json({ hasCookies: true, cookies: "", updatedAt: stat.mtimeMs });
}
const content = fs.readFileSync(PH_COOKIES_PATH, "utf-8");
res.json({ hasCookies: true, cookies: content, updatedAt: stat.mtimeMs });
} catch (err) {
console.warn("⚠️ Pornhub cookies okunamadı:", err.message);
res.status(500).json({ error: "Cookies okunamadı" });
}
});
app.post("/api/pornhub/cookies", requireAuth, (req, res) => {
try {
let cookies = req.body?.cookies;
if (typeof cookies !== "string") {
return res.status(400).json({ error: "cookies alanı metin olmalı" });
}
cookies = cookies.replace(/\r\n/g, "\n");
if (cookies.length > 20000) {
return res.status(400).json({ error: "Cookie içeriği çok büyük (20KB sınırı)." });
}
if (/[^\x09\x0a\x0d\x20-\x7e]/.test(cookies)) {
return res.status(400).json({ error: "Cookie içeriğinde desteklenmeyen karakterler var." });
}
if (!PH_COOKIES_PATH) {
return res.status(500).json({ error: "Cookie yolu tanımlı değil." });
}
ensureDirForFile(PH_COOKIES_PATH);
fs.writeFileSync(PH_COOKIES_PATH, cookies, "utf-8");
res.json({ ok: true, updatedAt: Date.now() });
} catch (err) {
console.error("❌ Pornhub cookies yazılamadı:", err.message);
res.status(500).json({ error: "Cookies kaydedilemedi" });
}
});
// --- 🎚️ YouTube kalite ayarları ---
app.get("/api/youtube/settings", requireAuth, (req, res) => {
try {