require'travis/cli'moduleTravismoduleCLIclassApiCommand<CommandincludeTravis::Client::Methodsattr_accessor:enterprise_nameattr_reader:sessionabstracton('-e','--api-endpoint URL','Travis API server to talk to')on('-I','--[no-]insecure','do not verify SSL certificate of API endpoint')on('--pro',"short-cut for --api-endpoint '#{Travis::Client::COM_URI}'"){|c,_|c.api_endpoint=Travis::Client::COM_URI}on('--com',"short-cut for --api-endpoint '#{Travis::Client::COM_URI}'"){|c,_|c.api_endpoint=Travis::Client::COM_URI}on('--org',"short-cut for --api-endpoint '#{Travis::Client::ORG_URI}'"){|c,_|c.api_endpoint=Travis::Client::ORG_URI}on('--staging','talks to staging system'){|c,_|c.api_endpoint=c.api_endpoint.gsub(/api/,'api-staging')}on('-t','--token [ACCESS_TOKEN]','access token to use'){|c,t|c.access_token=t}on('--debug','show API requests')do|c,_|c.debug=truec.session.instrumentdo|info,request|c.time(info,request)endendon('--debug-http','show HTTP(S) exchange')do|c,_|c.session.debug_http=trueendon('-X','--enterprise [NAME]','use enterprise setup (optionally takes name for multiple setups)')do|c,name|c.enterprise_name=name||'default'endon('--adapter ADAPTER','Faraday adapter to use for HTTP requests')do|c,adapter|adapter.gsub!'-','_'require"faraday/adapter/#{adapter}"require'typhoeus/adapters/faraday'ifadapter=='typhoeus'c.session.faraday_adapter=adapter.to_symenddefinitialize(*)@session=Travis::Client.new(:agent_info=>"command #{command_name}")superenddefendpoint_configconfig['endpoints']||={}config['endpoints'][api_endpoint]||={}enddefsetupsetup_enterpriseself.api_endpoint=default_endpointifdefault_endpointandnotexplicit_api_endpoint?self.access_token||=fetch_tokenendpoint_config['access_token']||=access_tokenendpoint_config['insecure']=insecureunlessinsecure.nil?self.insecure=endpoint_config['insecure']session.ssl={:verify=>false}ifinsecure?authenticateifpro?orenterprise?enddefenterprise?!!endpoint_config['enterprise']enddefpro?api_endpoint==Travis::Client::COM_URIenddeforg?api_endpoint==Travis::Client::ORG_URIenddefdetected_endpoint?api_endpoint==detected_endpointenddefauthenticateerror"not logged in, please run #{command("login#{endpoint_option}")}"ifaccess_token.nil?enddefsync(block=true,dot='.')user.syncsteps=count=1whileblockanduser.reload.syncing?count+=1sleep(1)ifcount%steps==0steps=count/10+1output.printdotendendendprivatedefsetup_enterprisereturnunlesssetup_enterprise?c=config['enterprise']||={}c[enterprise_name]=api_endpointifexplicit_api_endpoint?c[enterprise_name]||=write_to($stderr)doerror"enterprise setup not configured"unlessinteractive?user_input=ask(color("Enterprise domain: ",:bold)).to_sdomain=user_input[%r{^(?:https?://)?(.*?)/?(?:/api/?)?$},1]endpoint="https://#{domain}/api"config['default_endpoint']=endpointifagree("Use #{colordomain,:bold} as default endpoint? "){|q|q.default='yes'}endpointendself.api_endpoint=c[enterprise_name]self.insecure=insecureunlessinsecure.nil?self.session.ssl.delete:ca_fileendpoint_config['enterprise']=true@setup_ennterpise=trueenddefsetup_enterprise?@setup_ennterpise||=false!!enterprise_nameandnot@setup_ennterpiseenddefload_ghreturnifdefined?GHdebug"Loading gh"require'gh'gh_config=session.config['github']gh_config&&=gh_config.inject({}){|h,(k,v)|h.update(k.to_sym=>v)}gh_config||={}gh_config[:ssl]=Travis::Client::Session::SSL_OPTIONSgh_config[:ssl]={:verify=>false}ifgh_config[:api_url]andgh_config[:api_url]!="https://api.github.com"gh_config.delete:scopesgh_config[:instrumenter]=procdo|type,payload,&block|nextblock.callunlesstype=='http.gh'time("GitHub API: #{payload[:verb].to_s.upcase}#{payload[:url]}",block)endifdebug?GH.set(gh_config)enddefgithub_endpointload_ghGH.with({}).api_hostenddeflisten(*args)super(*args)do|listener|on_signal{listener.disconnect}yieldlistenerendenddefdefault_endpointENV['TRAVIS_ENDPOINT']||config['default_endpoint']enddefdetected_endpointdefault_endpoint||Travis::Client::ORG_URIenddefendpoint_optionreturn""iforg?anddetected_endpoint?return" --org"iforg?return" --pro"ifpro?ifconfig['enterprise']key,_=config['enterprise'].detect{|k,v|v.start_with?api_endpoint}return" -X"ifkey=="default"return" -X #{key}"ifkeyend" -e %p"%api_endpointenddeffetch_tokenENV['TRAVIS_TOKEN']||endpoint_config['access_token']endendendend