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:
@@ -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 {
|
||||
|
||||
Reference in New Issue
Block a user