code: function GitHub(ready, user, pass, useSsh) {
  
    var opts = {
      version: '3.0.0',
      timeout: 30000
    };
  
    var proxy = bag.proxy();
    if (proxy) {
      proxy = url.parse(proxy);
      opts.proxy = {
        host: proxy.hostname,
        port: proxy.port
      };
    }
  
    this.gh = new github(opts);
    this.useSsh = useSsh;
  
    var self = this;
    if (user && pass) {
      // if credentials are provided, use those to authenticate
      self.gh.authenticate({
        type: 'basic',
        username: user,
        password: pass
      });
      // the other branches (oauth and no authentication only call the ready()
      // callback after another callback has resolved, which guarantees that this
      // (constructor) function has returned before the ready callback has been
      // called. This, in turn, ensures that the code calling this constructor has received a constructed object. To ensure this also for the basic auth case, we need to make this asynchronous as well.
      process.nextTick(ready);
    } else {
      var gitHubAuth = new GithubAuth();
      gitHubAuth
        .readAuthToken()
        .then(function success(token) {
          self.gh.authenticate({
            type : 'oauth',
            token : token
          });
          ready();
        }, function error() {
          // no auth token, user did not execute repoman --signin
          // continue without authentication
          ready();
      });
    }
  }
docs: Configuration generator for remote GitHub repositories.
  
  @param {String} user GitHub username
  @param {String} pass GitHub password
  @class