Compare commits

...

13 Commits

Author SHA1 Message Date
Alexander Corn
8be8e395b6 3.19.8 2016-05-05 16:12:35 -04:00
Alexander Corn
4b7ea80fcf Fixed profile URL cache always being deleted when editing profile 2016-05-05 16:12:27 -04:00
Alexander Corn
7f945afbca 3.19.7 2016-05-05 16:00:38 -04:00
Alexander Corn
3b241ba24f Cache profile URL so we don't need to request it all the time 2016-05-05 16:00:28 -04:00
Alexander Corn
fddd74cf24 Fixed crash if response to login is malformed 2016-04-04 21:42:46 -04:00
Alexander Corn
9a3138aa35 3.19.6 2016-04-02 16:15:35 -04:00
Alexander Corn
839d8b51e3 Automatically handle time offset when enabling 2FA (fixes #98) 2016-04-02 16:14:34 -04:00
Alexander Corn
ddf0221489 Added disable_twofactor example 2016-04-02 16:14:17 -04:00
Alexander Corn
64aaca66be 3.19.5 2016-03-31 14:34:27 -04:00
Alexander Corn
aac26212d7 Fixed sessionExpired event always being emitted for confirmation errors 2016-03-23 19:03:55 -04:00
Alexander Corn
d8d99a804f 3.19.4 2016-03-23 14:33:28 -04:00
Alexander Corn
f47afae1ea Pin cheerio version to 0.19.0
https://github.com/DoctorMcKay/node-steam-tradeoffer-manager/issues/120#issuecomment-200179648
2016-03-23 14:33:08 -04:00
Alexander Corn
8d90aac203 Use SteamID v1.0.0 2016-03-22 01:20:02 -04:00
6 changed files with 107 additions and 19 deletions

View File

@@ -18,10 +18,10 @@ SteamCommunity.prototype.getConfirmations = function(time, key, callback) {
if(err) {
if (err.message == "Invalid protocol: steammobile:") {
err.message = "Not Logged In";
self._notifySessionExpired(err);
}
callback(err);
self._notifySessionExpired(err);
return;
}

View File

@@ -114,6 +114,10 @@ SteamCommunity.prototype.editProfile = function(settings, callback) {
}
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));

View File

@@ -61,7 +61,15 @@ SteamCommunity.prototype.finalizeTwoFactor = function(secret, activationCode, ca
return;
}
finalize(token);
SteamTotp.getTimeOffset(function(err, offset, latency) {
if (err) {
callback(err);
return;
}
diff = offset;
finalize(token);
});
});
function finalize(token) {

View File

@@ -0,0 +1,61 @@
var SteamCommunity = require('../index.js');
var ReadLine = require('readline');
var fs = require('fs');
var community = new SteamCommunity();
var rl = ReadLine.createInterface({
"input": process.stdin,
"output": process.stdout
});
rl.question("Username: ", function(accountName) {
rl.question("Password: ", function(password) {
rl.question("Two-Factor Auth Code: ", function(authCode) {
rl.question("Revocation Code: R", function(rCode) {
doLogin(accountName, password, authCode, "", rCode);
});
});
});
});
function doLogin(accountName, password, authCode, captcha, rCode) {
community.login({
"accountName": accountName,
"password": password,
"twoFactorCode": authCode,
"captcha": captcha
}, function(err, sessionID, cookies, steamguard) {
if(err) {
if(err.message == 'SteamGuard') {
console.log("This account does not have two-factor authentication enabled.");
process.exit();
return;
}
if(err.message == 'CAPTCHA') {
console.log(err.captchaurl);
rl.question("CAPTCHA: ", function(captchaInput) {
doLogin(accountName, password, authCode, captchaInput);
});
return;
}
console.log(err);
process.exit();
return;
}
console.log("Logged on!");
community.disableTwoFactor("R" + rCode, function(err) {
if(err) {
console.log(err);
process.exit();
return;
}
console.log("Two-factor authentication disabled!");
process.exit();
});
});
}

View File

@@ -135,6 +135,8 @@ SteamCommunity.prototype.login = function(details, callback) {
callback(error);
} else if(!body.success) {
callback(new Error(body.message || "Unknown error"));
} else if(!body.oauth) {
callback(new Error("Malformed response"));
} else {
var sessionID = generateSessionID();
var oAuth = JSON.parse( body.oauth );
@@ -339,20 +341,34 @@ SteamCommunity.prototype.loggedIn = function(callback) {
SteamCommunity.prototype._myProfile = function(endpoint, form, callback) {
var self = this;
this.httpRequest("https://steamcommunity.com/my", {"followRedirect": false}, function(err, response, body) {
if(err || response.statusCode != 302) {
callback(err || "HTTP error " + response.statusCode);
return;
}
var match = response.headers.location.match(/steamcommunity\.com(\/(id|profiles)\/[^\/]+)\/?/);
if(!match) {
callback(new Error("Can't get profile URL"));
return;
}
if (this._profileURL) {
completeRequest(this._profileURL);
} else {
this.httpRequest("https://steamcommunity.com/my", {"followRedirect": false}, function(err, response, body) {
if(err || response.statusCode != 302) {
callback(err || "HTTP error " + response.statusCode);
return;
}
var match = response.headers.location.match(/steamcommunity\.com(\/(id|profiles)\/[^\/]+)\/?/);
if(!match) {
callback(new Error("Can't get profile URL"));
return;
}
self._profileURL = match[1];
setTimeout(function () {
delete self._profileURL; // delete the cache
}, 60000);
completeRequest(match[1]);
}, "steamcommunity");
}
function completeRequest(url) {
var options = {
"uri": "https://steamcommunity.com" + match[1] + "/" + endpoint,
"uri": "https://steamcommunity.com" + url + "/" + endpoint,
"method": "GET"
};
@@ -362,10 +378,9 @@ SteamCommunity.prototype._myProfile = function(endpoint, form, callback) {
}
self.httpRequest(options, callback, "steamcommunity");
}, "steamcommunity");
}
};
require('./components/http.js');
require('./components/chat.js');
require('./components/profile.js');

View File

@@ -1,6 +1,6 @@
{
"name": "steamcommunity",
"version": "3.19.3",
"version": "3.19.8",
"description": "Provides an interface for logging into and interacting with the Steam Community website",
"keywords": ["steam", "steam community"],
"homepage": "https://github.com/DoctorMcKay/node-steamcommunity",
@@ -15,9 +15,9 @@
"dependencies": {
"request": "^2.61.0",
"node-bignumber": "^1.2.1",
"steamid": "^0.3.1",
"steamid": "^1.0.0",
"xml2js": "^0.4.11",
"cheerio": "^0.20.0",
"cheerio": "0.19.0",
"async": "^1.4.2",
"steam-totp": "^1.3.0"
},