docs: function requestWebGMEToken(gmeConfig, userId, password, serverUrl, callback) {
      var deferred,
          req;
  
      if (gmeConfig.authentication.enable === false) {
          return Q().nodeify(callback);
      }
  
      if (!serverUrl) {
          serverUrl = 'http://localhost:' + gmeConfig.server.port;
      }
  
      req = superagent.get(serverUrl + '/api/v1/user/token');
  
      if (gmeConfig.authentication.guestAccount !== userId) {
          if (!password) {
              return Q.reject(new Error('password was not provided!'));
          }
  
          req.set('Authorization', 'Basic ' + Buffer.from(userId + ':' + password).toString('base64'));
      }
  
      deferred = Q.defer();
  
      req.end(function (err, res) {
          if (err) {
              deferred.reject(err);
          } else {
              deferred.resolve(res.body.webgmeToken);
          }
      });
  
      return deferred.promise.nodeify(callback);
  }