1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798 |
- #!/usr/bin/env node
- var logging = require("./modules/logging");
- var querystring = require("querystring");
- var config = require("./modules/config");
- var clean = require("./modules/cleaner");
- var http = require("http");
- var mime = require("mime");
- var path = require("path");
- var url = require("url");
- var fs = require("fs");
- var routes = {
- index: require("./routes/index"),
- avatars: require("./routes/avatars"),
- skins: require("./routes/skins"),
- renders: require("./routes/renders")
- };
- function asset_request(req, res) {
- var filename = __dirname + "/public/" + req.url.path_list.join("/");
- fs.exists(filename, function(exists) {
- if (exists) {
- fs.readFile(filename, function(err, file_buffer) {
- if (err) {
- res.writeHead(500, {"Content-type" : "text/plain"});
- res.end("Internal Server Error");
- } else {
- res.writeHead(200, {
- "Content-type" : mime.lookup(filename),
- "Content-Length": file_buffer.length
- });
- res.end(file_buffer);
- }
- });
- } else {
- res.writeHead(404, {
- "Content-type" : "text/plain"
- });
- res.end("Not Found");
- }
- });
- }
- function requestHandler(req, res) {
- var query = url.parse(req.url).query;
- var request = req;
- // we need to use url.parse and give the result to url.parse because nodejs
- request.url = url.parse(req.url, query);
- request.url.query = request.url.query || {};
- // remove trailing and double slashes + other junk
- var path_list = path.resolve(request.url.pathname).split("/");
- for (var i = 0; i < path_list.length; i++) {
- // URL decode
- path_list[i] = querystring.unescape(path_list[i]);
- }
- request.url.path_list = path_list;
- var local_path = request.url.path_list[1];
- console.log(request.method + " " + request.url.href);
- if (request.method == "GET" || request.method == "HEAD") {
- try {
- switch (local_path) {
- case "":
- routes.index(request, res);
- break;
- case "avatars":
- routes.avatars(request, res);
- break;
- case "skins":
- routes.skins(request, res);
- break;
- case "renders":
- routes.renders(request, res);
- break;
- default:
- asset_request(request, res);
- }
- } catch(e) {
- var error = JSON.stringify(req.headers) + "\n" + e.stack;
- logging.error("Error: " + error);
- res.writeHead(500, {
- "Content-Type": "text/plain"
- });
- res.end(config.debug_enabled ? error : "Internal Server Error");
- }
- } else {
- res.writeHead(405, {
- "Content-Type": "text/plain"
- });
- res.end("Method Not Allowed");
- }
- }
- http.createServer(requestHandler).listen(process.env.PORT || 3000);
- // cleaning worker
- setInterval(clean.run, config.cleaning_interval * 1000);
|