以编程方式从OAuth获取access_token - 使用JIRA-Ruby gem

时间:2013-02-28 05:15:17

标签: ruby session oauth jira

我正在尝试编写一个JIRA-ruby脚本(仅在命令行中使用)来标记一些自动关闭的JIRA问题。

我从here借了一个例子,因为我正在使用'jira-ruby'宝石。

但这会有效,但它会弹出一个浏览器,要求您单击“允许”以获取access_token。我想以编程方式执行此操作,但我认为API不是为此目的而构建的。由于access_token每次都会更改,并且此脚本将在cronjob中定期运行,因此我们需要有一种方法来执行此操作。知道我们可以用其他方式做到这一点吗?

require 'jira'

@jira = JIRA::Client.new({:site => 'http://localhost:2990', :context_path => '/jira', :consumer_key => 'test-jira', :private_key_file => "rsakey.pem"})

if ARGV.length == 0
  # If not passed any command line arguments, open a browser and prompt the
  # user for the OAuth verifier.
  request_token = @jira.request_token
  puts "Opening #{request_token.authorize_url}"
  system "open #{request_token.authorize_url}"

  puts "Enter the oauth_verifier: "
  oauth_verifier = gets.strip

  access_token = @jira.init_access_token(:oauth_verifier => oauth_verifier)
  puts "Access token: #{access_token.token} secret: #{access_token.secret}"
elsif ARGV.length == 2
  # Otherwise assume the arguments are a previous access token and secret.
  access_token = @jira.set_access_token(ARGV[0], ARGV[1])
else
  # Script must be passed 0 or 2 arguments
  raise "Usage: #{$0} [ token secret ]"
end

# Show all projects
projects = @jira.Project.all

projects.each do |project|
  puts "Project -> key: #{project.key}, name: #{project.name}"
end
issue = @jira.Issue.find('DEMO-1')
puts issue

我知道有一种方法可以使用长期访问令牌,但如果Jira支持它则不会真正使用。

1 个答案:

答案 0 :(得分:0)

我最初使用的是jira-ruby宝石,但我发现表现很糟糕。我最后只是使用卷曲,因为我只需要需要JSON宝石,而不是那么臃肿。让您的Jira管理员创建一个永远不会通过管理员权限更改密码的用户,然后执行以下操作以查找“DEMO-1”

require 'json'

username = "admin"
password = "abc123"

issue = JSON.parse(%x[curl -u #{username}:#{password} \"http://jira/rest/api/latest/issue/DEMO-1\"])

这是link to the Jira REST API documentation,只需选择您正在使用的相同版本的Jira。这将绕过oauth和弹出窗口的任何问题。