request.js 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. 'use strict';
  2. var isAuthenticated = false;
  3. var request = require('request');
  4. /**
  5. * Performs a GET request for the resource.
  6. * @param {Object} config
  7. * @param {(string|Object)} options
  8. * @param {function(Error, Object, string)} done
  9. */
  10. module.exports.get = function(config, options, done) {
  11. _authenticate(config, function(err) {
  12. if (err) return done(err);
  13. request.get(_modify(options), done);
  14. });
  15. };
  16. /**
  17. * Performs a POST request for the resource.
  18. * @private
  19. * @param {Object} config
  20. * @param {(string|Object)} options
  21. * @param {function(Error, Object, string)} done
  22. */
  23. module.exports.post = function(config, options, done) {
  24. _authenticate(config, function(err) {
  25. if (err) return done(err);
  26. request.post(_modify(options), done);
  27. });
  28. };
  29. /**
  30. * Authenticates using the configured pass and user.
  31. * @private
  32. * @param {Object} config
  33. * @param {function(Error)} done
  34. */
  35. function _authenticate(config, done) {
  36. if (isAuthenticated || !config.pass || !config.user) return done();
  37. request.post({
  38. form: {
  39. formname: 'RpcApiUser_Login',
  40. fail_url: 'https://www.crunchyroll.com/login',
  41. name: config.user,
  42. password: config.pass
  43. },
  44. jar: true,
  45. url: 'https://www.crunchyroll.com/?a=formhandler'
  46. }, function(err) {
  47. if (err) return done(err);
  48. isAuthenticated = true;
  49. done();
  50. });
  51. }
  52. /**
  53. * Modifies the options to use the authenticated cookie jar.
  54. * @private
  55. * @param {(string|Object)} options
  56. * @returns {Object}
  57. */
  58. function _modify(options) {
  59. if (typeof options === 'string') options = {url: options};
  60. options.jar = true;
  61. return options;
  62. }