Sha256: e8e7e178048cc304d02ff6602ea2e237b9a825c145274de96b69b189d04113e7
Contents?: true
Size: 1.24 KB
Versions: 1
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
1 entries across 1 versions & 1 rubygems
Version | Path |
---|---|
github-authentication-1.1.0 | lib/github_authentication/generator/app.rb |