code: func (c *Client) ValidateGithubAuthCallback(q url.Values) (*GithubAuthResponse, error) {
  	out, err := c.PostJSON(c.Endpoint("github", "requests", "validate"),
  		validateGithubAuthCallbackReq{Query: q})
  	if err != nil {
  		return nil, trace.Wrap(err)
  	}
  	var rawResponse githubAuthRawResponse
  	if err := json.Unmarshal(out.Bytes(), &rawResponse); err != nil {
  		return nil, trace.Wrap(err)
  	}
  	response := GithubAuthResponse{
  		Username: rawResponse.Username,
  		Identity: rawResponse.Identity,
  		Cert:     rawResponse.Cert,
  		Req:      rawResponse.Req,
  		TLSCert:  rawResponse.TLSCert,
  	}
  	if len(rawResponse.Session) != 0 {
  		session, err := services.GetWebSessionMarshaler().UnmarshalWebSession(
  			rawResponse.Session)
  		if err != nil {
  			return nil, trace.Wrap(err)
  		}
  		response.Session = session
  	}
  	response.HostSigners = make([]services.CertAuthority, len(rawResponse.HostSigners))
  	for i, raw := range rawResponse.HostSigners {
  		ca, err := services.GetCertAuthorityMarshaler().UnmarshalCertAuthority(raw)
  		if err != nil {
  			return nil, trace.Wrap(err)
  		}
  		response.HostSigners[i] = ca
  	}
  	return &response, nil
  }
docs: // ValidateGithubAuthCallback validates Github auth callback returned from redirect