class CF::UAA::TokenCli

Constants

CF_TARGET_FILE
CF_TOKEN_FILE

Public Instance Methods

issuer_request(client_id, secret = nil, code_verifier = nil) { |token_issuer(target.to_s, client_id, secret, { token_target: target_value(:token_endpoint), basic_auth: target_value(:basic_auth), use_pkce: true, code_verifier: code_verifier, skip_ssl_validation: target_value(:skip_ssl_validation), ssl_ca_file: target_value(:ca_cert) })| ... } click to toggle source
# File lib/uaa/cli/token.rb, line 93
def issuer_request(client_id, secret = nil, code_verifier = nil)
  update_target_info
  yield TokenIssuer.new(Config.target.to_s, client_id, secret,
      { token_target: Config.target_value(:token_endpoint),
        basic_auth: Config.target_value(:basic_auth),
        use_pkce: true,
        code_verifier: code_verifier,
        skip_ssl_validation: Config.target_value(:skip_ssl_validation),
        ssl_ca_file: Config.target_value(:ca_cert) })
rescue Exception => e
  complain e
end
say_success(grant) click to toggle source
# File lib/uaa/cli/token.rb, line 73
def say_success(grant)
  say "\nSuccessfully fetched token via #{grant} grant.\nTarget: #{Config.target}\nContext: #{Config.context}, from client #{Config[:client_id]}\n\n"
end
set_context(token_info) click to toggle source
# File lib/uaa/cli/token.rb, line 77
def set_context(token_info)
  return gripe "attempt to get token failed\n" unless token_info && token_info["access_token"]
  contents = TokenCoder.decode(token_info["access_token"], verify: false)
  new_context = contents["user_name"] || contents["client_id"] || "bad_token"
  Config.delete(Config.target, new_context)
  Config.context = new_context
  did_save = true
  (did_save &= Config.add_opts(user_id: contents["user_id"])) if contents["user_id"]
  (did_save &= Config.add_opts(client_id: contents["client_id"])) if contents["client_id"]
  jti = token_info.delete("jti") if token_info.has_key? "jti"
  did_save &= Config.add_opts token_info
  (did_save &= Config.add_opts(scope: contents["scope"])) if contents["scope"]
  (did_save &= Config.add_opts(jti: jti)) if jti
  did_save
end
use_browser(client_id, secret = nil, grant = nil) click to toggle source
# File lib/uaa/cli/token.rb, line 167
def use_browser(client_id, secret = nil, grant = nil)
  do_authcode = (not grant.nil?) && (grant == 'authcode')
  code_verifier = SecureRandom.base64(96).tr("+/", "-_").tr("=", "")
  catcher = Stub::Server.new(TokenCatcher,
      logger: Util.default_logger(debug? ? :debug : trace? ? :trace : :info),
      info: {client_id: client_id, client_secret: secret, code_verifier: code_verifier, do_authcode: do_authcode},
      port: opts[:port]).run_on_thread
  uri = issuer_request(client_id, secret, code_verifier) { |ti|
    do_authcode ? ti.authcode_uri("#{catcher.url}/authcode", opts[:scope]) :
        ti.implicit_uri("#{catcher.url}/callback", opts[:scope])
  }
  return unless catcher.info[:uri] = uri
  say " and launching browser with #{uri}"
  Launchy.open(uri, debug: false, dry_run: false)
  print "waiting for token "
  while catcher.info[:uri] || !catcher.info[:token_info]
    sleep 5
    print "."
  end
  say_success(do_authcode ? "authorization code" : "implicit") if set_context(catcher.info[:token_info])
  return unless opts[:cf]
  begin
    cf_target = File.open(CF_TARGET_FILE, 'r') { |f| f.read.strip }
    tok_json = File.open(CF_TOKEN_FILE, 'r') { |f| f.read } if File.exist?(CF_TOKEN_FILE)
    cf_tokens = Util.json_parse(tok_json, :none) || {}
    cf_tokens[cf_target] = auth_header
    File.open(CF_TOKEN_FILE, 'w') { |f| f.write(cf_tokens.to_json) }
  rescue Exception => e
    gripe "\nUnable to save token to cf token file"
    complain e
  end
end