File size: 2,115 Bytes
675e98c
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
require('dotenv').config();
const express = require('express');
const cors = require('cors');
const helmet = require('helmet');
const path = require('path');
const mime = require('mime-types');
const apiRouter = require('./routes/api');
const uiRouter = require('./routes/ui');
const swaggerUi = require('swagger-ui-express');
const swaggerDocument = require('./swagger/swagger.json');

const app = express();
const PORT = process.env.PORT || 7860;
const DOMAIN = process.env.DOMAIN || 'localhost';

// Security middleware
app.use(helmet());
app.disable('x-powered-by');

// CORS configuration
const corsOptions = {
  origin: [
    `http://${DOMAIN}`,
    `https://${DOMAIN}`,
    `http://${DOMAIN}:${PORT}`,
    `https://${DOMAIN}:${PORT}`,
    'http://localhost:7860',
    'http://127.0.0.1:7860'
  ],
  methods: ['GET', 'POST', 'OPTIONS'],
  allowedHeaders: ['Content-Type', 'Authorization'],
  optionsSuccessStatus: 200
};
app.use(cors(corsOptions));

// Other middleware
app.use(express.json());
app.use(express.urlencoded({ extended: true }));
app.use(express.static(path.join(__dirname, '../public')));

// File serving
app.use('/api/files', express.static(path.join(__dirname, '../uploads'), {
  setHeaders: (res, filePath) => {
    const contentType = mime.lookup(filePath) || 'application/octet-stream';
    res.setHeader('Content-Type', contentType);
  }
}));

// Routes
app.use('/api', apiRouter);
app.use('/', uiRouter);
app.use('/api-docs', swaggerUi.serve, swaggerUi.setup(swaggerDocument));

// Error handling middleware
app.use((err, req, res, next) => {
  console.error(err.stack);
  res.status(500).json({ error: 'Internal Server Error' });
});

// Start server
app.listen(PORT, () => {
  if (DOMAIN === 'localhost') {
    console.log(`Server running on http://localhost:${PORT}`);
    console.log(`API Docs: http://localhost:${PORT}/api-docs`);
    console.log(`Upload UI: http://localhost:${PORT}/upload`);
  } else {
    console.log(`Server running on https://${DOMAIN}`);
    console.log(`API Docs: https://${DOMAIN}/api-docs`);
    console.log(`Upload UI: https://${DOMAIN}/upload`);
  }
});