dnsweeper
Version:
Advanced CLI tool for DNS record risk analysis and cleanup. Features CSV import for Cloudflare/Route53, automated risk assessment, and parallel DNS validation.
81 lines (70 loc) • 2.42 kB
text/typescript
import express from 'express';
import cors from 'cors';
import helmet from 'helmet';
import { uploadRouter } from './routes/upload';
import { dnsRouter } from './routes/dns';
import { analysisRouter } from './routes/analysis';
import { statsRouter } from './routes/stats';
import { settingsRouter } from './routes/settings';
import { historyRouter } from './routes/history';
import { exportRouter } from './routes/export';
import authRouter from './routes/auth';
import reportsRouter from './routes/reports';
import { errorHandler } from './middleware/errorHandler';
import { requestLogger } from './middleware/logger';
import { configureCors, securityHeaders } from './middleware/auth';
export const createApp = async (): Promise<express.Application> => {
const app = express();
// セキュリティヘッダー
app.use(securityHeaders);
// セキュリティミドルウェア
app.use(helmet({
contentSecurityPolicy: false, // 開発時は無効化
crossOriginEmbedderPolicy: false
}));
// CORS設定(アカウント別制御対応)
app.use(configureCors);
app.use(cors({
origin: process.env.FRONTEND_URL || 'http://localhost:5173',
credentials: true,
methods: ['GET', 'POST', 'PUT', 'DELETE', 'OPTIONS'],
allowedHeaders: ['Content-Type', 'Authorization', 'X-API-Key']
}));
// ボディパーサー
app.use(express.json({ limit: '10mb' }));
app.use(express.urlencoded({ extended: true, limit: '10mb' }));
// ログミドルウェア
app.use(requestLogger);
// ヘルスチェック
app.get('/api/health', (req, res) => {
res.json({
success: true,
data: {
status: 'ok',
version: '1.0.0',
timestamp: new Date().toISOString()
}
});
});
// API ルート
app.use('/api/auth', authRouter);
app.use('/api/upload', uploadRouter);
app.use('/api/dns', dnsRouter);
app.use('/api/analysis', analysisRouter);
app.use('/api/stats', statsRouter);
app.use('/api/settings', settingsRouter);
app.use('/api/history', historyRouter);
app.use('/api/export', exportRouter);
app.use('/api/reports', reportsRouter);
// 404 ハンドラー
app.use('*', (req, res) => {
res.status(404).json({
success: false,
error: 'Route not found',
message: `Cannot ${req.method} ${req.originalUrl}`
});
});
// エラーハンドリング
app.use(errorHandler);
return app;
};