networking.js 2.7 KB

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