Module: Legion::Extensions::Github::CLI::App

Includes:
App::Runners::CredentialStore, App::Runners::Manifest, Helpers::Client
Defined in:
lib/legion/extensions/github/cli/app.rb

Constant Summary

Constants included from App::Runners::Manifest

App::Runners::Manifest::DEFAULT_EVENTS, App::Runners::Manifest::DEFAULT_PERMISSIONS

Constants included from Helpers::Client

Helpers::Client::CREDENTIAL_RESOLVERS

Constants included from Helpers::TokenCache

Helpers::TokenCache::TOKEN_BUFFER_SECONDS

Instance Method Summary collapse

Methods included from App::Runners::CredentialStore

#load_oauth_token, #store_app_credentials, #store_oauth_token

Methods included from App::Runners::Manifest

#exchange_manifest_code, #generate_manifest, #manifest_url

Methods included from Helpers::Client

#connection, #gh_cli_token_output, #max_fallback_retries, #on_rate_limit, #on_scope_authorized, #on_scope_denied, #resolve_broker_app, #resolve_credential, #resolve_env, #resolve_gh_cli, #resolve_next_credential, #resolve_settings_app, #resolve_settings_delegated, #resolve_settings_pat, #resolve_vault_app, #resolve_vault_delegated, #resolve_vault_pat

Methods included from Helpers::ScopeRegistry

#credential_fingerprint, #invalidate_scope, #mark_rate_limited, #rate_limited?, #register_scope, #scope_status

Methods included from Helpers::TokenCache

#fetch_token, #mark_rate_limited, #rate_limited?, #store_token

Instance Method Details

#complete_setup(code:) ⇒ Object



37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
# File 'lib/legion/extensions/github/cli/app.rb', line 37

def complete_setup(code:, **)
  result = exchange_manifest_code(code: code)[:result]
  return { error: 'exchange_failed' } unless result&.dig('id')

  if respond_to?(:store_app_credentials, true)
    store_app_credentials(
      app_id:         result['id'].to_s,
      private_key:    result['pem'],
      client_id:      result['client_id'],
      client_secret:  result['client_secret'],
      webhook_secret: result['webhook_secret']
    )
  end

  { result: result }
end

#setup(name:, url:, webhook_url:, org: nil, callback_timeout: 300) ⇒ Object



17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
# File 'lib/legion/extensions/github/cli/app.rb', line 17

def setup(name:, url:, webhook_url:, org: nil, callback_timeout: 300, **)
  server = Helpers::CallbackServer.new
  server.start
  callback_url = server.redirect_uri

  manifest = generate_manifest(
    name: name, url: url,
    webhook_url: webhook_url,
    callback_url: callback_url
  )[:result]

  url_result = manifest_url(manifest: manifest, org: org)[:result]

  { result: { manifest_url: url_result, callback_port: server.port,
              message: 'Open the manifest URL in your browser to create the GitHub App',
              callback: server.wait_for_callback(timeout: callback_timeout) } }
ensure
  server&.shutdown
end