From 6eacbabb675395e2dc5ffba32dd87850d42ec572 Mon Sep 17 00:00:00 2001 From: Edward Callahan Date: Wed, 20 Sep 2017 07:37:09 -0700 Subject: [PATCH 1/5] Added user session authentication. The api implementation was missing authenticating user with session tickets. I added the functionality in. This allows the nodejs web api to authenticate sessions for a specific game. Feel free to give it a try! --- steam/UserAuth.js | 56 ++++++++++++++++++++++++++++++++++++++++ steam/api.js | 1 + steam/containers/Auth.js | 13 ++++++++++ 3 files changed, 70 insertions(+) create mode 100644 steam/UserAuth.js create mode 100644 steam/containers/Auth.js diff --git a/steam/UserAuth.js b/steam/UserAuth.js new file mode 100644 index 0000000..bad1047 --- /dev/null +++ b/steam/UserAuth.js @@ -0,0 +1,56 @@ +module.exports = (function(){ + "use strict"; + var Client = require('./Client'), + q = require('q'), + AuthContainer = require('./containers/Auth'); + + function UserAuth() { + Client.apply(this, arguments); + this.setInterface('ISteamUserAuth'); + } + + UserAuth.prototype = Object.create(Client.prototype); + UserAuth.prototype.constructor = UserAuth; + + UserAuth.prototype.AuthenticateUserTicket = function AuthenticateUserTicket(appId, sessionTicket) { + var deferred = q.defer(), + args, + client, + authStatus; + + this.setMethod('AuthenticateUserTicket'); + this.setVersion(1); + + if(!appId || !Number.isSafeInteger(appId)) + { + deferred.reject(new Error("Invalid appId")); + } + if(!sessionTicket) + { + deferred.reject(new Error("Invalid sessionTicket")); + } + + args = { + 'appid': appId, + 'ticket': sessionTicket + }; + + client = this.setupClient(args); + + client.then(function(result){ + // players = cleanObject(result.data.response.players, PlayerContainer); + // deferred.resolve( players.length === 1 ? players[0] : players ); + //console.log(result.data.response.params); + var auth = new AuthContainer(result.data.response.params); + console.log(auth); + deferred.resolve(auth); + }) + .fail(function(result){ + deferred.reject(result); + }); + + return deferred.promise; + }; + + return UserAuth; +})(); diff --git a/steam/api.js b/steam/api.js index 48cfadd..56f52f2 100644 --- a/steam/api.js +++ b/steam/api.js @@ -7,6 +7,7 @@ mixin(exports, { News: require('./News'), App: require('./App'), User: require('./User'), + UserAuth: require('./UserAuth'), Player: require('./Player'), UserStats: require('./User/Stats'), Community: require('./Community'), diff --git a/steam/containers/Auth.js b/steam/containers/Auth.js new file mode 100644 index 0000000..cfabdc1 --- /dev/null +++ b/steam/containers/Auth.js @@ -0,0 +1,13 @@ +module.exports = (function(undefined){ + "use strict"; + + function Auth(auth) { + this.result = auth.result; + this.steamid = auth.steamid; + this.ownersteamid = auth.ownersteamid; + this.vacbanned = auth.vacbanned; + this.publisherbanned = auth.publisherbanned; + } + + return Auth; +})(); From 7b1a19a976ace7ae3688d93bee554d84944da45b Mon Sep 17 00:00:00 2001 From: edmiester777 Date: Wed, 20 Sep 2017 09:29:35 -0700 Subject: [PATCH 2/5] Removed testing console log. Forgot to remove my test console logs and reference comment blocks. --- steam/UserAuth.js | 4 ---- 1 file changed, 4 deletions(-) diff --git a/steam/UserAuth.js b/steam/UserAuth.js index bad1047..2dfc302 100644 --- a/steam/UserAuth.js +++ b/steam/UserAuth.js @@ -38,11 +38,7 @@ module.exports = (function(){ client = this.setupClient(args); client.then(function(result){ - // players = cleanObject(result.data.response.players, PlayerContainer); - // deferred.resolve( players.length === 1 ? players[0] : players ); - //console.log(result.data.response.params); var auth = new AuthContainer(result.data.response.params); - console.log(auth); deferred.resolve(auth); }) .fail(function(result){ From bcaa6864e68f083993f81d291b4cf49f081cdbb0 Mon Sep 17 00:00:00 2001 From: Edward Callahan Date: Thu, 21 Sep 2017 06:37:35 -0700 Subject: [PATCH 3/5] Fixed crash upon returning error. I made the mistake of not checking for errors when a response is returned from the API. This is fixed. All errors will now be rejected. --- steam/UserAuth.js | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/steam/UserAuth.js b/steam/UserAuth.js index 2dfc302..8fd527d 100644 --- a/steam/UserAuth.js +++ b/steam/UserAuth.js @@ -38,10 +38,15 @@ module.exports = (function(){ client = this.setupClient(args); client.then(function(result){ - var auth = new AuthContainer(result.data.response.params); - deferred.resolve(auth); + if(result.data.error != 'undefined' && result.data.error != null) { + deferred.reject(result.data); + } + else { + var auth = new AuthContainer(result.data.response.params); + deferred.resolve(auth); + } }) - .fail(function(result){ + .catch(function(result){ deferred.reject(result); }); From ae17f60a5fa783554a3d858c62971b925695d728 Mon Sep 17 00:00:00 2001 From: Edward Callahan Date: Thu, 21 Sep 2017 06:47:15 -0700 Subject: [PATCH 4/5] Fixed error detection. I was an idiot and forgot that the error object is in the result.data.response object. --- steam/UserAuth.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/steam/UserAuth.js b/steam/UserAuth.js index 8fd527d..b24da34 100644 --- a/steam/UserAuth.js +++ b/steam/UserAuth.js @@ -38,8 +38,8 @@ module.exports = (function(){ client = this.setupClient(args); client.then(function(result){ - if(result.data.error != 'undefined' && result.data.error != null) { - deferred.reject(result.data); + if(result.data.response.error != 'undefined' && result.data.response.error != null) { + deferred.reject(result.data.response); } else { var auth = new AuthContainer(result.data.response.params); From 505e3f3bf40b10da80568cc4e05d9bfb72ff798d Mon Sep 17 00:00:00 2001 From: Edward Callahan Date: Thu, 21 Sep 2017 18:45:31 -0700 Subject: [PATCH 5/5] Fixed bad null check. --- steam/UserAuth.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/steam/UserAuth.js b/steam/UserAuth.js index b24da34..79bcf7e 100644 --- a/steam/UserAuth.js +++ b/steam/UserAuth.js @@ -38,7 +38,7 @@ module.exports = (function(){ client = this.setupClient(args); client.then(function(result){ - if(result.data.response.error != 'undefined' && result.data.response.error != null) { + if(result.data.response.error != null && result.data.response.error != null) { deferred.reject(result.data.response); } else {