networking.js 2.9 KB

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