Sha256: 3d356bf1e823bf831c101eb4b2cbf9f3e426d734ddbbc642ef64c902d6cf4f8c
Contents?: true
Size: 1.24 KB
Versions: 3
Compression:
Stored size: 1.24 KB
Contents
# frozen_string_literal: true require 'jwt' require "uri" require 'openssl' require "github_authentication/http" module GithubAuthentication module Generator class App attr_reader :app_id, :installation_id def initialize(pem:, installation_id:, app_id:) @private_key = OpenSSL::PKey::RSA.new(pem) @installation_id = installation_id @app_id = app_id end 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 unless response.is_a?(Net::HTTPSuccess) raise TokenGeneratorError, "[#{response.code}] #{response.body}" end Token.from_json(response.body) end private 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 end end end
Version data entries
3 entries across 3 versions & 1 rubygems