class Github::Authentication::Generator::App

Attributes

app_id[R]
installation_id[R]

Public Class Methods

new(pem:, installation_id:, app_id:) click to toggle source
# File lib/github/authentication/generator/app.rb, line 15
def initialize(pem:, installation_id:, app_id:)
  @private_key = OpenSSL::PKey::RSA.new(pem)
  @installation_id = installation_id
  @app_id = app_id
end

Public Instance Methods

generate() click to toggle source
# File lib/github/authentication/generator/app.rb, line 21
def generate
  url = "https://api.github.com/app/installations/#{installation_id}/access_tokens"
  response = Http.post(url) do |request|
    request["Authorization"] = "Bearer #{jwt}"
    request["Accept"] = "application/vnd.github.machine-man-preview+json"
    request
  end
  Token.from_json(response.body)
end

Private Instance Methods

jwt() click to toggle source
# File lib/github/authentication/generator/app.rb, line 33
def jwt
  payload = {
    # issued at time
    iat: Time.now.utc.to_i,
    # JWT expiration time (10 minute maximum)
    exp: Time.now.utc.to_i + (10 * 60),
    # GitHub App's identifier
    iss: app_id,
  }
  JWT.encode(payload, @private_key, "RS256")
end