skins.js 2.6 KB

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