server.js 2.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788
  1. #!/usr/bin/env node
  2. var config = require("./modules/config");
  3. var logging = require("./modules/logging");
  4. var clean = require("./modules/cleaner");
  5. var http = require("http");
  6. var mime = require("mime");
  7. var url = require("url");
  8. var fs = require("fs");
  9. var routes = {
  10. index: require("./routes/index"),
  11. avatars: require("./routes/avatars"),
  12. skins: require("./routes/skins"),
  13. renders: require("./routes/renders")
  14. };
  15. function asset_request(req, res) {
  16. var filename = __dirname + "/public/" + req.url.pathname;
  17. fs.exists(filename, function(exists) {
  18. if (exists) {
  19. fs.readFile(filename, function(err, contents) {
  20. if (err) {
  21. res.writeHead(500, {"Content-type" : "text/plain"});
  22. res.end("Internal server error");
  23. } else {
  24. res.writeHead(200, {
  25. "Content-type" : mime.lookup(filename),
  26. "Content-Length": contents.length
  27. });
  28. res.end(contents);
  29. }
  30. });
  31. } else {
  32. res.writeHead(404, {
  33. "Content-type" : "text/plain"
  34. });
  35. res.end("Not found");
  36. }
  37. });
  38. }
  39. function requestHandler(req, res) {
  40. var querystring = url.parse(req.url).query;
  41. var request = req;
  42. // we need to use url.parse and give the result to url.parse because nodejs
  43. request.url = url.parse(req.url, querystring);
  44. request.url.query = request.url.query || {};
  45. var local_path = request.url.pathname.split("/")[1];
  46. console.log(request.method + " " + request.url.pathname);
  47. if (request.method == "GET" || request.method == "HEAD") {
  48. try {
  49. switch (local_path) {
  50. case "":
  51. routes.index(request, res);
  52. break;
  53. case "avatars":
  54. routes.avatars(request, res);
  55. break;
  56. case "skins":
  57. routes.skins(request, res);
  58. break;
  59. case "renders":
  60. routes.renders(request, res);
  61. break;
  62. default:
  63. asset_request(request, res);
  64. }
  65. } catch(e) {
  66. var error = JSON.stringify(req.headers) + "\n" + e.stack;
  67. logging.error("Error: " + error);
  68. res.writeHead(500, {
  69. "Content-Type": "text/plain"
  70. });
  71. res.end(config.debug_enabled ? error : "Internal server error");
  72. }
  73. } else {
  74. res.writeHead(405, {
  75. "Content-Type": "text/plain"
  76. });
  77. res.end("Method not allowed");
  78. }
  79. }
  80. http.createServer(requestHandler).listen(process.env.PORT || 3000);
  81. // cleaning worker
  82. setInterval(clean.run, config.cleaning_interval * 1000);