Exemplo n.º 1
0
SteamWebLogOn.prototype.webLogOn = function (callback) {
  var sessionKey = SteamCrypto.generateSessionKey();

  getInterface('ISteamUserAuth').post('AuthenticateUser', 1, {
    steamid: this._steamClient.steamID,
    sessionkey: sessionKey.encrypted,
    encrypted_loginkey: SteamCrypto.symmetricEncrypt(
      new Buffer(this._webLoginKey),
      sessionKey.plain
    )
  }, function (statusCode, body) {
    if (statusCode !== 200) {
      // request a new login key first
      this._steamUser.requestWebAPIAuthenticateUserNonce(function (nonce) {
        this._webLoginKey = nonce.webapi_authenticate_user_nonce;
        this.webLogOn(callback);
      }.bind(this));
      return;
    }

    this.sessionID = Math.floor(Math.random() * 1000000000).toString();
    this.cookies = [
      'sessionid=' + this.sessionID,
      'steamLogin='******'steamLoginSecure=' + body.authenticateuser.tokensecure
    ];

    callback(this.sessionID, this.cookies);
  }.bind(this));
};
Exemplo n.º 2
0
Vapor.prototype._webLogOn = function(nonce) {
  var self = this;

  var sessionKey = SteamCrypto.generateSessionKey();

  var data = 'steamid=' + self._client.steamID +
      '&sessionkey=' + sessionKey.encrypted.toString('hex').replace(/../g, '%$&') +
      '&encrypted_loginkey=' + SteamCrypto.symmetricEncrypt(new Buffer(nonce), sessionKey.plain).toString('hex').replace(/../g, '%$&');

  var options = {
    hostname: 'api.steampowered.com',
    path: '/ISteamUserAuth/AuthenticateUser/v1',
    method: 'POST',
    headers: {
      'Content-Type': 'application/x-www-form-urlencoded',
      'Content-Length': data.length
    }
  };

  var req = https.request(options, function(res) {
    if (res.statusCode === 200) {
      res.on('data', function(chunk) {
        var response = JSON.parse(chunk);

        var sessionid = crypto.randomBytes(12).toString('hex');
        var cookies = [
          'sessionid=' + sessionid,
          'steamLogin='******'steamLoginSecure=' + response.authenticateuser.tokensecure
        ];

        self.emit('message:info', 'Received new web cookies.');

        self._cookies = cookies;
        self.emit('cookies', cookies, sessionid);
      });
    } else {
      self.emit('message:warn', 'Received status ' + res.statusCode + ' in "webLogOn". Retrying...');

      self._steamUser.requestWebAPIAuthenticateUserNonce(function(result) {
        self._webLogOn(result.webapi_authenticate_user_nonce);
      });

      return;
    }
  });

  req.on('error', function() {
    self.emit('message:warn', 'Request in "webLogOn" failed. Retrying...');

    self._webLogOn(nonce);
  });

  req.end(data);
};
Exemplo n.º 3
0
handlers[EMsg.ChannelEncryptRequest] = function(data) {
	// assume server isn't dead
	this._connection.setTimeout(0);

//  var encRequest = Schema.MsgChannelEncryptRequest.decode(data);
	this.emit('debug', 'encrypt request');

	var sessionKey = SteamCrypto.generateSessionKey();
	this._tempSessionKey = sessionKey.plain;
	var keyCrc = BufferCRC32.signed(sessionKey.encrypted);

	var encResp = new Schema.MsgChannelEncryptResponse().encode();
	var body = new ByteBuffer(encResp.limit + 128 + 4 + 4, ByteBuffer.LITTLE_ENDIAN); // key, crc, trailer

	body.append(encResp);
	body.append(sessionKey.encrypted);
	body.writeInt32(keyCrc);
	body.writeUint32(0); // TODO: check if the trailer is required
	body.flip();

	this.send({"msg": EMsg.ChannelEncryptResponse}, body.toBuffer());
};