skins.js 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879
  1. var logging = require("../logging");
  2. var helpers = require("../helpers");
  3. var skins = require("../skins");
  4. var path = require("path");
  5. var lwip = require("lwip");
  6. function handle_default(img_status, userId, def, err, callback) {
  7. if (def && def !== "steve" && def !== "alex") {
  8. callback({
  9. status: img_status,
  10. redirect: def,
  11. err: err
  12. });
  13. } else {
  14. def = def || skins.default_skin(userId);
  15. lwip.open(path.join(__dirname, "..", "public", "images", def + "_skin.png"), function(lwip_err, image) {
  16. if (image) {
  17. image.toBuffer("png", function(buf_err, buffer) {
  18. callback({
  19. status: img_status,
  20. body: buffer,
  21. type: "image/png",
  22. hash: def,
  23. err: buf_err || lwip_err || err
  24. });
  25. });
  26. } else {
  27. callback({
  28. status: -1,
  29. err: lwip_err || err
  30. });
  31. }
  32. });
  33. }
  34. }
  35. // GET skin request
  36. module.exports = function(req, callback) {
  37. var userId = (req.url.path_list[1] || "").split(".")[0];
  38. var def = req.url.query.default;
  39. var rid = req.id;
  40. if (!helpers.id_valid(userId)) {
  41. callback({
  42. status: -2,
  43. body: "Invalid userid"
  44. });
  45. return;
  46. }
  47. // strip dashes
  48. userId = userId.replace(/-/g, "");
  49. try {
  50. helpers.get_skin(rid, userId, function(err, hash, status, image) {
  51. if (err) {
  52. logging.error(req.id, err);
  53. if (err.code === "ENOENT") {
  54. // no such file
  55. cache.remove_hash(req.id, userId);
  56. }
  57. }
  58. if (image) {
  59. callback({
  60. status: status,
  61. body: image,
  62. type: "image/png",
  63. hash: hash,
  64. err: err
  65. });
  66. } else {
  67. handle_default(2, userId, def, err, callback);
  68. }
  69. });
  70. } catch(e) {
  71. logging.error(rid, "error:", e.stack);
  72. handle_default(-1, userId, def, e, callback);
  73. }
  74. };