diff --git a/lib/lastfm/lastfm-request.js b/lib/lastfm/lastfm-request.js index 9e02e28..778384d 100644 --- a/lib/lastfm/lastfm-request.js +++ b/lib/lastfm/lastfm-request.js @@ -1,12 +1,14 @@ if (global.GENTLY_HIJACK) require = GENTLY_HIJACK.hijack(require); var http = require("http") + , https = require('https') , querystring = require('querystring') , _ = require("underscore") , crypto = require("crypto") , LastFmBase = require("./lastfm-base"); -var WRITE_METHODS = ["album.addtags", "album.removetag", "album.share", +var WRITE_METHODS = [ "auth.getmobilesession", + "album.addtags", "album.removetag", "album.share", "artist.addtags", "artist.removetag", "artist.share", "artist.shout", "event.attend", "event.share", "event.shout", "library.addalbum", "library.addartist", "library.addtrack", @@ -17,7 +19,8 @@ var WRITE_METHODS = ["album.addtags", "album.removetag", "album.share", "track.updatenowplaying", "user.shout"], SIGNED_METHODS = ["auth.getmobilesession", "auth.getsession", "auth.gettoken", - "radio.getplaylist"]; + "radio.getplaylist"], + SECURE_METHODS = ["auth.getmobilesession"]; var LastFmRequest = module.exports = function(lastfm, method, params) { var that = this; @@ -29,20 +32,21 @@ var LastFmRequest = module.exports = function(lastfm, method, params) { sendRequest(lastfm.host, lastfm.url, params); function sendRequest(host, url, params) { - var httpVerb = isWriteRequest() ? "POST" : "GET" var requestParams = buildRequestParams(params); + var httpVerb = isWriteRequest(requestParams.method) ? "POST" : "GET" var data = querystring.stringify(requestParams); if (httpVerb == "GET") { url += "?" + data; } var options = { host: host, - port: 80, + port: isSecureMethod(requestParams.method) ? 443 : 80, path: url, method: httpVerb, headers: requestHeaders(httpVerb, host, data) }; - var req = http.request(options, chunkedResponse); + var protocol = isSecureMethod(requestParams.method) ? https : http; + var req = protocol.request(options, chunkedResponse); req.on("error", function(error) { that.emit("error", error); }); @@ -67,17 +71,17 @@ var LastFmRequest = module.exports = function(lastfm, method, params) { requestParams.album = requestParams.album || params.track.album["#text"]; } } - if (requiresSignature()) { + if (requiresSignature(method)) { requestParams.api_sig = createSignature(requestParams, lastfm.secret); } return requestParams; } - function requiresSignature() { + function requiresSignature(method) { return params.signed || isWriteRequest() || isSignedMethod(method); } - function isWriteRequest() { + function isWriteRequest(method) { return params.write || isWriteMethod(method); } @@ -89,6 +93,10 @@ var LastFmRequest = module.exports = function(lastfm, method, params) { return method && _(WRITE_METHODS).include(method.toLowerCase()); } + function isSecureMethod(method) { + return method && _(SECURE_METHODS).include(method.toLowerCase()); + } + function requestHeaders(httpVerb, host, data) { var headers = { "User-Agent": lastfm.useragent