skins.js 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103
  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, req, err, callback) {
  7. def = def || skins.default_skin(userId);
  8. if (def !== "steve" && def !== "alex") {
  9. if (helpers.id_valid(def)) {
  10. // clean up the old URL to match new image
  11. var parsed = req.url;
  12. delete parsed.query["default"];
  13. delete parsed.search;
  14. parsed.pathname = parsed.pathname.replace(userId, def);
  15. var newUrl = url.format(parsed);
  16. callback({
  17. status: img_status,
  18. redirect: newUrl,
  19. err: err
  20. });
  21. } else {
  22. callback({
  23. status: img_status,
  24. redirect: def,
  25. err: err
  26. });
  27. }
  28. } else {
  29. // handle steve and alex
  30. lwip.open(path.join(__dirname, "..", "public", "images", def + "_skin.png"), function(lwip_err, image) {
  31. if (image) {
  32. image.toBuffer("png", function(buf_err, buffer) {
  33. callback({
  34. status: img_status,
  35. body: buffer,
  36. type: "image/png",
  37. hash: def,
  38. err: buf_err || lwip_err || err
  39. });
  40. });
  41. } else {
  42. callback({
  43. status: -1,
  44. err: lwip_err || err
  45. });
  46. }
  47. });
  48. }
  49. }
  50. // GET skin request
  51. module.exports = function(req, callback) {
  52. var userId = (req.url.path_list[1] || "").split(".")[0];
  53. var def = req.url.query.default;
  54. var rid = req.id;
  55. // check for extra paths
  56. if (req.url.path_list.length > 2) {
  57. callback({
  58. status: -2,
  59. body: "Invalid URL Path"
  60. });
  61. return;
  62. }
  63. if (!helpers.id_valid(userId)) {
  64. callback({
  65. status: -2,
  66. body: "Invalid UserID"
  67. });
  68. return;
  69. }
  70. // strip dashes
  71. userId = userId.replace(/-/g, "");
  72. try {
  73. helpers.get_skin(rid, userId, function(err, hash, status, image) {
  74. if (err) {
  75. logging.error(req.id, err);
  76. if (err.code === "ENOENT") {
  77. // no such file
  78. cache.remove_hash(req.id, userId);
  79. }
  80. }
  81. if (image) {
  82. callback({
  83. status: status,
  84. body: image,
  85. type: "image/png",
  86. hash: hash,
  87. err: err
  88. });
  89. } else {
  90. handle_default(2, userId, def, req, err, callback);
  91. }
  92. });
  93. } catch(e) {
  94. logging.error(rid, "error:", e.stack);
  95. handle_default(-1, userId, def, req, e, callback);
  96. }
  97. };