Cuando se hacen solicitudes autenticadas a la API de GitHub, las aplicaciones a menudo necesitan recuperar los repositorios y organizaciones actuales del usuario. En esta guía, te explicaremos cómo descubrir estos recursos de forma confiable.
Para interactuar con la API GitHub, se usará Octokit.rb. Puede encontrar el código fuente completo para este proyecto en el repositorio platform-samples.
Introducción
Si todavía no lo ha hecho, debe leer la guía "Aspectos básicos de la autenticación" antes de trabajar con los ejemplos siguientes. En los ejemplos siguientes se supone que ha registrado una OAuth app y que la 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 que se trate de un repositorio en donde el usuario tiene acceso de escritura o lectura o que sea un repositorio público al cual tenga acceso dicho usuario.
Los ámbitos de OAuth y las directivas de aplicación de la organización determinan a qué repositorios puede acceder la aplicación para un usuario. Utiliza el siguiente flujo de trabajo para descubrir estos repositorios.
Como siempre, primero se necesita la biblioteca de Ruby Octokit.rb de GitHub. Después, se configurará Octokit.rb para controlar automáticamente la paginación. Para más información sobre la paginación, consulta "Uso de la paginación en la API de REST".
require 'octokit'
Octokit.auto_paginate = true
Luego, se pasará el token de OAuth de la aplicación para un usuario determinado:
# !!! 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, ya se podrán capturar los repositorios a los que la aplicación puede acceder 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 realizar estas tareas, la aplicación necesita una autorización de OAuth con permisos suficientes. Por ejemplo, el ámbito read:org
permite enumerar equipos y el ámbito user
permite publicitar la pertenencia a la organización 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.
Al igual que se hizo al detectar los repositorios anteriores, se empezará por exigir la biblioteca de Ruby Octokit.rb de GitHub y se configurará para que controle la paginación de forma automática. Para más información sobre la paginación, consulta "Uso de la paginación en la API de REST".
require 'octokit'
Octokit.auto_paginate = true
Después, se pasará el token de OAuth de la aplicación para un usuario determinado a fin de inicializar el cliente de 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"]
Luego, se pueden enumerar las organizaciones a las que la aplicación puede acceder para el usuario:
client.organizations.each do |organization|
puts "User belongs to the #{organization[:login]} organization."
end
Devuelve todas las membresías de organización del usuario
Si ha leído toda la documentación, es posible que haya observado un método de API para enumerar las pertenencias a 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.
Como aplicación, habitualmente querrás obtener todas las organizaciones de los usuarios a las cuales tu app tiene acceso autorizado. El flujo de trabajo anterior te proporcionará exactamente eso.