mirror of
https://github.com/MrUnknownDE/unknownbin.git
synced 2026-04-09 18:03:44 +02:00
82 lines
2.7 KiB
JavaScript
82 lines
2.7 KiB
JavaScript
var http = require('http');
|
|
var url = require('url');
|
|
var fs = require('fs');
|
|
|
|
var express = require('express');
|
|
var logger = require('winston');
|
|
|
|
var DocumentHandler = require('./lib/document_handler.js');
|
|
var FileStorage = require('./lib/file_storage.js');
|
|
|
|
// load configuration
|
|
var config = JSON.parse(fs.readFileSync(__dirname + '/config.json', 'utf8'));
|
|
config.port = process.env.PORT || config.port || 8080;
|
|
config.host = process.env.HOST || config.host || 'localhost';
|
|
|
|
// logger-setup
|
|
logger.remove(logger.transports.Console);
|
|
logger.add(logger.transports.Console, {colorize: true, level: 'verbose'});
|
|
logger.info('Welcome to Hastebin Plus!');
|
|
|
|
// init file-storage
|
|
var fileStorage = new FileStorage(config.dataPath);
|
|
|
|
// load static documents into file-storage
|
|
for (var name in config.documents) {
|
|
var path = config.documents[name];
|
|
var data = fs.readFileSync(path, 'utf8');
|
|
if (data) {
|
|
fileStorage.set(name, data, function(success) {});
|
|
logger.verbose('Created document: ' + name + " ==> " + path);
|
|
} else {
|
|
logger.warn('Unable to find document: ' + name + " ==> " + path);
|
|
}
|
|
}
|
|
|
|
// configure the document handler
|
|
var documentHandler = new DocumentHandler({
|
|
store: fileStorage,
|
|
maxLength: config.maxLength,
|
|
keyLength: config.keyLength,
|
|
createKey: config.createKey
|
|
});
|
|
|
|
// compress static assets
|
|
var cssCompressor = require('clean-css');
|
|
var jsCompressor = require('uglify-js');
|
|
|
|
var files = fs.readdirSync(__dirname + '/static');
|
|
for (var i = 0; i < files.length; i++) {
|
|
var item = files[i];
|
|
var dest = "";
|
|
if ((item.indexOf('.css') === item.length - 4) && (item.indexOf('.min.css') === -1)) {
|
|
dest = item.substring(0, item.length - 4) + '.min.css';
|
|
fs.writeFileSync(__dirname + '/static/' + dest, new cssCompressor().minify(fs.readFileSync(__dirname + '/static/' + item, 'utf8')).styles, 'utf8');
|
|
logger.verbose('Compressed: ' + item + ' ==> ' + dest);
|
|
} else if ((item.indexOf('.js') === item.length - 3) && (item.indexOf('.min.js') === -1)) {
|
|
dest = item.substring(0, item.length - 3) + '.min.js';
|
|
fs.writeFileSync(__dirname + '/static/' + dest, jsCompressor.minify(__dirname + '/static/' + item).code, 'utf8');
|
|
logger.verbose('Compressed: ' + item + ' ==> ' + dest);
|
|
}
|
|
}
|
|
|
|
// setup routes and request-handling
|
|
var app = express();
|
|
|
|
app.get('/raw/:id', function(req, res) {
|
|
return documentHandler.handleRawGet(req.params.id, res);
|
|
});
|
|
app.post('/documents', function(req, res) {
|
|
return documentHandler.handlePost(req, res);
|
|
});
|
|
app.get('/documents/:id', function(req, res) {
|
|
return documentHandler.handleGet(req.params.id, res);
|
|
});
|
|
app.use(express.static('static'));
|
|
app.get('/:id', function(req, res, next) {
|
|
res.sendFile(__dirname + '/static/index.html');
|
|
});
|
|
|
|
app.listen(config.port, config.host);
|
|
logger.info('Listening on ' + config.host + ':' + config.port);
|