Esta versión de GitHub Enterprise se discontinuó el 2021-06-09. No se realizarán lanzamientos de patch, ni siquiera para problemas de seguridad críticos. Para obtener un mejor desempeño, más seguridad y nuevas características, actualiza a la última versión de GitHub Enterprise. Para obtener ayuda con la actualización, contacta al soporte de GitHub Enterprise.

Descubrir los recursos para un usuario

Aprende cómo encontrar los repositorios y organizaciones a los cuales puede acceder tu app para un usuario de manera confiable para tus solicitudes autenticadas a la API de REST.

Cuando se hacen solicitudes autenticadas a la API de GitHub Enterprise, las aplicaciones a menudo tienen que obtener los repositorios y organizaciones del usuario. En esta guía, te explicaremos cómo descubrir estos recursos de forma confiable.

Para interactuar con la API de GitHub Enterprise, estaremos utilizando Octokit.rb. Puedes encontrar todo el código fuente de este proyecto en el repositorio platform-samples.

Empezar

Si aún no lo has hecho, deberías leer la guía de "Conceptos Básicos de la Autenticación" antes de comenzar a trabajar en los siguientes ejemplos. Éstos asumen que tienes una aplicación de OAuth registrada y de que tu aplicación tiene un token de OAuth para un usuario.

Descubre los repositorios a los cuales tu app puede acceder para un usuario

Adicionalmente a tener sus propios repositorios personales, un usuario puede ser un colaborador en los repositorios que pertenezcan a otros usuarios y organizaciones. En conjunto, estos son los repositorios en donde el usuario tiene acceso privilegiado: ya sea un repositorio privado en donde el usuario tiene acceso de lectura o escritura, o un repositorio público en donde el usuario tiene acceso de escritura.

Los alcances de OAuth y las políticas de aplicación de la organización determinan a cuáles de estos repositorios puede acceder tu app para un usuario. Utiliza el siguiente flujo de trabajo para descubrir estos repositorios.

Como siempre, primero necesitaremos la biblioteca de Ruby del Octokit.rb de GitHub. Luego, configuraremos a Octokit.rb para que nos gestione automáticamente la paginación.

require 'octokit'

Octokit.auto_paginate = true

Después, pasaremos el Token de OAuth para un usuario específico de nuestra aplicación:

# !!! DO NOT EVER USE HARD-CODED VALUES IN A REAL APP !!!
# Instead, set and test environment variables, like below.
client = Octokit::Client.new :access_token => ENV["OAUTH_ACCESS_TOKEN"]

Luego estaremos listos para obtener los repositorios a los cuales puede acceder nuestra aplicación para el usuario:

client.repositories.each do |repository|
  full_name = repository[:full_name]
  has_push_access = repository[:permissions][:push]

  access_type = if has_push_access
                  "write"
                else
                  "read-only"
                end

  puts "User has #{access_type} access to #{full_name}."
end

Descubre las organizaciones a las cuales puede acceder tu app para un usuario

Las aplicaciones pueden llevar a cabo todo tipo de tareas relacionadas con las organizaciones para un usuario. Para llevar a cabo estas tareas, la app necesita una Autorización de OAuth con permisos suficientes. Por ejemplo, el alcance read:org te permite listar los equipos, y el alcance user te permite publicitar la membresía organizacional del usuario. Una vez que un usuario haya otorgado uno o más de estos alcances a tu app, estarás listo para obtener las organizaciones de éste.

Tal como hicimos cuando descubrimos los repositorios anteriormente, comenzaremos requiriendo la biblioteca de Ruby Octokit.rb de GitHub y configurándola para que se encarge de la paginación por nosotros:

require 'octokit'

Octokit.auto_paginate = true

Después, pasaremos el Token de OAuth para un usuario específico de nuestra aplicación para inicializar nuestro cliente de la API:

# !!! DO NOT EVER USE HARD-CODED VALUES IN A REAL APP !!!
# Instead, set and test environment variables, like below.
client = Octokit::Client.new :access_token => ENV["OAUTH_ACCESS_TOKEN"]

Después, podremos listar las organizaciones a las cuales tiene acceso nuestra aplicación para el usuario:

client.organizations.each do |organization|
  puts "User belongs to the #{organization[:login]} organization."
end

No dependas de las organizaciones públicas

Si leíste los documentos de principio a fin, tal vez hayas notado que hay un Método de la API para listar las membrecías de organizaciones públicas de un usuario. La mayoría de las aplicaciones deberían evitar este método de la API. Este método solo devuelve las membrecías de las organizaciones públicas del usuario y no sus membrecías de organizaciones privadas.

Al fungir como una aplicación, habitualmente lo que buscas es todas las organizaciones del usuario (tanto públicas como privadas) en las cuales tu app tenga acceso autorizado. El flujo de trabajo anterior te proporcionará exactamente eso.