diff --git a/components/profile.js b/components/profile.js index 441e25c..32b14ac 100644 --- a/components/profile.js +++ b/components/profile.js @@ -34,31 +34,45 @@ SteamCommunity.prototype.setupProfile = function(callback) { SteamCommunity.prototype.editProfile = function(settings, callback) { var self = this; - this._myProfile("edit", null, function(err, response, body) { - if(err || response.statusCode != 200) { - if(callback) { - callback(err || new Error("HTTP error " + response.statusCode)); + this._myProfile('edit/info', null, function(err, response, body) { + if (err || response.statusCode != 200) { + if (callback) { + callback(err || new Error('HTTP error ' + response.statusCode)); } return; } var $ = Cheerio.load(body); - var form = $('#editForm'); - if(!form) { - if(callback) { - callback(new Error("Malformed response")); + var existingSettings = $('#profile_edit_config').data('profile-edit'); + if (!existingSettings || !existingSettings.strPersonaName) { + if (callback) { + callback(new Error('Malformed response')); } return; } - var values = {}; - form.serializeArray().forEach(function(item) { - values[item.name] = item.value; - }); + var values = { + sessionID: self.getSessionID(), + type: 'profileSave', + weblink_1_title: '', + weblink_1_url: '', + weblink_2_title: '', + weblink_2_url: '', + weblink_3_title: '', + weblink_3_url: '', + personaName: existingSettings.strPersonaName, + real_name: existingSettings.strRealName, + summary: existingSettings.strSummary, + country: existingSettings.LocationData.locCountryCode, + state: existingSettings.LocationData.locStateCode, + city: existingSettings.LocationData.locCityCode, + customURL: existingSettings.strCustomURL, + json: 1 + }; - for(var i in settings) { + for (var i in settings) { if(!settings.hasOwnProperty(i)) { continue; } @@ -92,6 +106,8 @@ SteamCommunity.prototype.editProfile = function(settings, callback) { values.customURL = settings[i]; break; + // These don't work right now + /* case 'background': // The assetid of our desired profile background values.profile_background = settings[i]; @@ -110,60 +126,55 @@ SteamCommunity.prototype.editProfile = function(settings, callback) { } break; - + */ // TODO: profile showcases } } - self._myProfile("edit", values, function(err, response, body) { + self._myProfile('edit', values, function(err, response, body) { if (settings.customURL) { delete self._profileURL; } - if(err || response.statusCode != 200) { - if(callback) { - callback(err || new Error("HTTP error " + response.statusCode)); - } - + if (!callback) { return; } - // Check for an error - var $ = Cheerio.load(body); - var error = $('#errorText .formRowFields'); - if(error) { - error = error.text().trim(); - if(error) { - if(callback) { - callback(new Error(error)); - } - - return; - } + if (err || response.statusCode != 200) { + callback(err || new Error('HTTP error ' + response.statusCode)); + return; } - if(callback) { + try { + var json = JSON.parse(body); + if (!json.success || json.success != 1) { + callback(new Error(json.errmsg || 'Request was not successful')); + return; + } + callback(null); + } catch (ex) { + callback(ex); } }); }); }; SteamCommunity.prototype.profileSettings = function(settings, callback) { - this._myProfile("edit/settings", null, (err, response, body) => { + this._myProfile('edit/settings', null, (err, response, body) => { if (err || response.statusCode != 200) { if (callback) { - callback(err || new Error("HTTP error " + response.statusCode)); + callback(err || new Error('HTTP error ' + response.statusCode)); } return; } var $ = Cheerio.load(body); - var existingSettings = $('.ProfileReactRoot[data-privacysettings]').data('privacysettings'); - if (!existingSettings) { - if(callback) { - callback(new Error("Malformed response")); + var existingSettings = $('#profile_edit_config').data('profile-edit'); + if (!existingSettings || !existingSettings.Privacy) { + if (callback) { + callback(new Error('Malformed response')); } return; @@ -171,8 +182,8 @@ SteamCommunity.prototype.profileSettings = function(settings, callback) { // PrivacySettings => {PrivacyProfile, PrivacyInventory, PrivacyInventoryGifts, PrivacyOwnedGames, PrivacyPlaytime} // eCommentPermission - var privacy = existingSettings.PrivacySettings; - var commentPermission = existingSettings.eCommentPermission; + var privacy = existingSettings.Privacy.PrivacySettings; + var commentPermission = existingSettings.Privacy.eCommentPermission; for (var i in settings) { if (!settings.hasOwnProperty(i)) { @@ -211,18 +222,18 @@ SteamCommunity.prototype.profileSettings = function(settings, callback) { } this._myProfile({ - "method": "POST", - "endpoint": "ajaxsetprivacy/", - "json": true, - "formData": { // it's multipart because lolvalve - "sessionid": this.getSessionID(), - "Privacy": JSON.stringify(privacy), - "eCommentPermission": commentPermission + method: 'POST', + endpoint: 'ajaxsetprivacy/', + json: true, + formData: { // it's multipart because lolvalve + sessionid: this.getSessionID(), + Privacy: JSON.stringify(privacy), + eCommentPermission: commentPermission } }, null, function(err, response, body) { if (err || response.statusCode != 200) { if (callback) { - callback(err || new Error("HTTP error " + response.statusCode)); + callback(err || new Error('HTTP error ' + response.statusCode)); } return; @@ -230,7 +241,7 @@ SteamCommunity.prototype.profileSettings = function(settings, callback) { if (body.success != 1) { if (callback) { - callback(new Error(body.success ? "Error " + body.success : "Request was not successful")); + callback(new Error(body.success ? 'Error ' + body.success : 'Request was not successful')); } return;