2
0

networking.js 2.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
  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. request.get({
  10. url: session_url + uuid,
  11. timeout: config.http_timeout // ms
  12. }, function (error, response, body) {
  13. if (!error && response.statusCode == 200) {
  14. // profile downloaded successfully
  15. callback(null, JSON.parse(body));
  16. } else {
  17. if (error) {
  18. callback(error, null);
  19. return;
  20. } else if (response.statusCode == 204 || response.statusCode == 404) {
  21. // we get 204 No Content when UUID doesn't exist (including 404 in case they change that)
  22. } else if (response.statusCode == 429) {
  23. // Too Many Requests
  24. console.warn("Too many requests for " + uuid);
  25. console.warn(body);
  26. } else {
  27. console.error("Unknown error:");
  28. console.error(response);
  29. console.error(body);
  30. }
  31. callback(null, null);
  32. }
  33. });
  34. };
  35. // downloads skin file from +url+
  36. // stores face image as +facename+
  37. // stores helm image as +helmname+
  38. // callback is forwarded from skins/extract_face or skins/extract_helm
  39. exp.skin_file = function(url, facename, helmname, callback) {
  40. request.get({
  41. url: url,
  42. encoding: null, // encoding must be null so we get a buffer
  43. timeout: config.http_timeout // ms
  44. }, function (error, response, body) {
  45. if (!error && response.statusCode == 200) {
  46. // skin downloaded successfully
  47. skins.extract_face(body, facename, function(err) {
  48. if (err) {
  49. callback(err);
  50. } else {
  51. skins.extract_helm(facename, body, helmname, function(err) {
  52. callback(err);
  53. });
  54. }
  55. });
  56. } else {
  57. if (error) {
  58. console.error("Error downloading '" + url + "': " + error);
  59. } else if (response.statusCode == 404) {
  60. console.warn("Texture not found: " + url);
  61. } else if (response.statusCode == 429) {
  62. // Too Many Requests
  63. // Never got this, seems like textures aren't limited
  64. console.warn("Too many requests for " + url);
  65. console.warn(body);
  66. } else {
  67. console.error("Unknown error:");
  68. console.error(response);
  69. console.error(body);
  70. }
  71. callback(null);
  72. }
  73. });
  74. };
  75. module.exports = exp;