![]() Server : Apache/2 System : Linux server-15-235-50-60 5.15.0-164-generic #174-Ubuntu SMP Fri Nov 14 20:25:16 UTC 2025 x86_64 User : gositeme ( 1004) PHP Version : 8.2.29 Disable Function : exec,system,passthru,shell_exec,proc_close,proc_open,dl,popen,show_source,posix_kill,posix_mkfifo,posix_getpwuid,posix_setpgid,posix_setsid,posix_setuid,posix_setgid,posix_seteuid,posix_setegid,posix_uname Directory : /home/gositeme/backups/lavocat.quebec/backup-20250730-021618/src/pages/api/ |
import type { NextApiRequest, NextApiResponse } from 'next';
import { getServerSession } from 'next-auth';
import fs from 'fs';
import path from 'path';
import formidable from 'formidable';
import { authOptions } from '@/lib/auth';
export const config = {
api: {
bodyParser: false,
},
};
const uploadsDir = path.join(process.cwd(), 'public', 'uploads', 'case-logos');
if (!fs.existsSync(uploadsDir)) fs.mkdirSync(uploadsDir, { recursive: true });
export default async function handler(req: NextApiRequest, res: NextApiResponse) {
if (req.method !== 'POST') {
return res.status(405).json({ error: 'Method not allowed' });
}
// Check authentication
const session = await getServerSession(req, res, authOptions);
if (!session) {
return res.status(401).json({ error: 'Unauthorized' });
}
const form = new formidable.IncomingForm({
multiples: false,
uploadDir: uploadsDir,
keepExtensions: true,
maxFileSize: 5 * 1024 * 1024, // 5MB
});
form.parse(req, async (err, fields, files) => {
if (err) {
return res.status(400).json({ error: 'Upload error', details: err.message });
}
const file = files.file;
if (!file) {
return res.status(400).json({ error: 'No file uploaded' });
}
const f = Array.isArray(file) ? file[0] : file;
if (!f.mimetype?.startsWith('image/')) {
return res.status(400).json({ error: 'Only image files are allowed' });
}
const ext = path.extname(f.originalFilename || f.newFilename || '');
const filename = `${Date.now()}_${Math.random().toString(36).slice(2)}${ext}`;
const destPath = path.join(uploadsDir, filename);
fs.renameSync(f.filepath, destPath);
const url = `/uploads/case-logos/${filename}`;
return res.status(200).json({ url });
});
}