networking.js 3.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495
  1. var request = require('request');
  2. var config = require('./config');
  3. var skins = require('./skins');
  4. var fs = require("fs");
  5. var session_url = "https://sessionserver.mojang.com/session/minecraft/profile/";
  6. var exp = {};
  7. // download the Mojang profile for +uuid+
  8. // callback contains error, profile object
  9. exp.get_profile = function(uuid, callback) {
  10. if (uuid.length <= 16) {
  11. callback(null, null);
  12. return;
  13. }
  14. request.get({
  15. url: session_url + uuid,
  16. timeout: config.http_timeout // ms
  17. }, function (error, response, body) {
  18. if (!error && response.statusCode == 200) {
  19. // profile downloaded successfully
  20. console.log(uuid + " profile downloaded");
  21. callback(null, JSON.parse(body));
  22. } else if (error) {
  23. callback(error, null);
  24. } else if (response.statusCode == 204 || response.statusCode == 404) {
  25. // we get 204 No Content when UUID doesn't exist (including 404 in case they change that)
  26. console.log(uuid + " uuid does not exist");
  27. callback(0, null);
  28. } else if (response.statusCode == 429) {
  29. // Too Many Requests
  30. console.warn(uuid + " Too many requests");
  31. console.warn(body);
  32. callback(null, null);
  33. } else {
  34. console.error(uuid + " Unknown error:");
  35. console.error(response);
  36. console.error(body);
  37. callback(null, null);
  38. }
  39. });
  40. };
  41. // downloads skin file from +url+
  42. // stores face image as +facename+
  43. // stores helm image as +helmname+
  44. // callback is forwarded from skins/extract_face or skins/extract_helm
  45. exp.skin_file = function(url, facename, helmname, callback) {
  46. if (fs.existsSync(facename) && fs.existsSync(facename)) {
  47. console.log("Images already exist, not downloading.");
  48. callback(null);
  49. return;
  50. }
  51. request.get({
  52. url: url,
  53. encoding: null, // encoding must be null so we get a buffer
  54. timeout: config.http_timeout // ms
  55. }, function (error, response, body) {
  56. if (!error && response.statusCode == 200) {
  57. // skin downloaded successfully
  58. console.log(url + " skin downloaded");
  59. skins.extract_face(body, facename, function(err) {
  60. if (err) {
  61. callback(err);
  62. } else {
  63. console.log(facename + " face extracted");
  64. skins.extract_helm(facename, body, helmname, function(err) {
  65. console.log(helmname + " helm extracted.");
  66. callback(err);
  67. });
  68. }
  69. });
  70. } else {
  71. if (error) {
  72. console.error("Error downloading '" + url + "': " + error);
  73. } else if (response.statusCode == 404) {
  74. console.warn("texture not found (404): " + url);
  75. } else if (response.statusCode == 429) {
  76. // Too Many Requests
  77. // Never got this, seems like textures aren't limited
  78. console.warn("too many requests for " + url);
  79. console.warn(body);
  80. } else {
  81. console.error("unknown error for " + url);
  82. console.error(response);
  83. console.error(body);
  84. error = "unknown error"; // Error needs to be set, otherwise null in callback
  85. }
  86. callback(error);
  87. }
  88. });
  89. };
  90. module.exports = exp;