70 líneas
2.0 KiB
JavaScript
70 líneas
2.0 KiB
JavaScript
import { NextResponse } from 'next/server';
|
|
import { RateLimiter } from '../../../lib/rate-limiter';
|
|
|
|
// Crear instancia del rate limiter
|
|
const rateLimiter = new RateLimiter();
|
|
|
|
export async function GET(request) {
|
|
try {
|
|
// Obtener IP del cliente
|
|
const forwarded = request.headers.get('x-forwarded-for');
|
|
const clientIP = forwarded
|
|
? forwarded.split(',')[0].trim()
|
|
: request.headers.get('x-real-ip') || 'unknown';
|
|
|
|
// Obtener estadísticas del rate limiter para este cliente
|
|
const rateLimitStats = rateLimiter.getStats(clientIP);
|
|
|
|
return NextResponse.json({
|
|
service: 'API Ping Service',
|
|
version: '1.0.0',
|
|
status: 'operational',
|
|
timestamp: new Date().toISOString(),
|
|
uptime: process.uptime(),
|
|
clientInfo: {
|
|
ip: clientIP,
|
|
rateLimit: rateLimitStats
|
|
},
|
|
features: {
|
|
maxPingsPerRequest: 10,
|
|
maxTimeout: 10000,
|
|
minTimeout: 1000,
|
|
supportedProtocols: ['ICMP'],
|
|
restrictions: [
|
|
'No private IP addresses',
|
|
'No localhost addresses',
|
|
'No reserved IP ranges',
|
|
'Rate limited to 10 requests per minute'
|
|
]
|
|
},
|
|
endpoints: {
|
|
ping: {
|
|
path: '/api/ping',
|
|
method: 'POST',
|
|
description: 'Perform ping test to specified target',
|
|
parameters: {
|
|
target: 'IP address or hostname (required)',
|
|
count: 'Number of pings (1-10, default: 4)',
|
|
timeout: 'Timeout in milliseconds (1000-10000, default: 5000)'
|
|
}
|
|
},
|
|
status: {
|
|
path: '/api/status',
|
|
method: 'GET',
|
|
description: 'Get service status and client information'
|
|
}
|
|
}
|
|
});
|
|
|
|
} catch (error) {
|
|
console.error('Status API error:', error);
|
|
|
|
return NextResponse.json({
|
|
service: 'API Ping Service',
|
|
status: 'error',
|
|
timestamp: new Date().toISOString(),
|
|
error: 'Internal server error'
|
|
}, { status: 500 });
|
|
}
|
|
}
|