code: func populateGithubClaims(client githubAPIClientI) (*services.GithubClaims, error) {
  	// find out the username
  	user, err := client.getUser()
  	if err != nil {
  		return nil, trace.Wrap(err, "failed to query Github user info")
  	}
  	// build team memberships
  	teams, err := client.getTeams()
  	if err != nil {
  		return nil, trace.Wrap(err, "failed to query Github user teams")
  	}
  	log.Debugf("Retrieved %v teams for GitHub user %v.", len(teams), user.Login)
  
  	orgToTeams := make(map[string][]string)
  	for _, team := range teams {
  		orgToTeams[team.Org.Login] = append(
  			orgToTeams[team.Org.Login], team.Slug)
  	}
  	if len(orgToTeams) == 0 {
  		return nil, trace.AccessDenied(
  			"list of user teams is empty, did you grant access?")
  	}
  	claims := &services.GithubClaims{
  		Username:            user.Login,
  		OrganizationToTeams: orgToTeams,
  	}
  	log.WithFields(logrus.Fields{trace.Component: "github"}).Debugf(
  		"Claims: %#v.", claims)
  	return claims, nil
  }
docs: // populateGithubClaims retrieves information about user and its team
  // memberships by calling Github API using the access token