networking.js 2.7 KB

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