diff options
Diffstat (limited to 'lib/bugzilla.rb')
-rw-r--r-- | lib/bugzilla.rb | 195 |
1 files changed, 0 insertions, 195 deletions
diff --git a/lib/bugzilla.rb b/lib/bugzilla.rb deleted file mode 100644 index d6af1b3..0000000 --- a/lib/bugzilla.rb +++ /dev/null @@ -1,195 +0,0 @@ -# ===GLSAMaker v2 -# Copyright (C) 2009-2011 Alex Legler <a3li@gentoo.org> -# Copyright (C) 2009 Pierre-Yves Rofes <py@gentoo.org> -# -# This program is free software: you can redistribute it and/or modify -# it under the terms of the GNU Affero General Public License as published by -# the Free Software Foundation, either version 3 of the License, or -# (at your option) any later version. -# -# For more information, see the LICENSE file. - -require 'nokogiri' -require 'fileutils' -require 'xmlrpc/client' - -module Bugzilla ; end - -%w[ comment history bug ].each {|lib| require File.join(File.dirname(__FILE__), "bugzilla/#{lib}")} - -# Bugzilla module -module Bugzilla - module_function - # Adds a comment to a bug. Returns the comment id on success, raises an exception on failure. - def add_comment(bug, comment) - if GLSAMAKER_BUGZIE_SKIP - Rails.logger.info 'Skipped Bugzilla.add_comment' - return - end - - Rails.logger.debug 'Called Bugzilla.add_comment' - did_retry = false - - begin - client, token = xmlrpc_client - - result = client.call('Bug.add_comment', { - 'id' => bug.to_i, - 'comment' => comment, - 'Bugzilla_token' => token, - }) - result['id'] - rescue XMLRPC::FaultException => e - if did_retry - raise "Could not add the comment: #{e.faultString} (code #{e.faultCode})" - end - - # If we need to log in first - if e.faultCode == 410 - Rails.logger.debug "Not logged in, doing that now." - log_in - did_retry = true - retry - else - raise "Could not add the comment: #{e.faultString} (code #{e.faultCode})" - end - end - - end - - # Updates a bug. Returns an array of changes that were done on the bug. - def update_bug(bug, changes = {}) - if GLSAMAKER_BUGZIE_SKIP - Rails.logger.info 'Skipped Bugzilla.update_bug' - return - end - - Rails.logger.debug 'Called Bugzilla.update_bug' - did_retry = false - - begin - client, token = xmlrpc_client - - rpc_data = {} - rpc_data['ids'] = [bug] - rpc_data['component'] = changes[:component] if changes.has_key?(:component) - rpc_data['product'] = changes[:product] if changes.has_key?(:product) - rpc_data['summary'] = changes[:summary] if changes.has_key?(:summary) - rpc_data['version'] = changes[:version] if changes.has_key?(:version) - rpc_data['comment'] = {'body' => changes[:comment]} if changes.has_key?(:comment) - rpc_data['priority'] = changes[:priority] if changes.has_key?(:priority) - rpc_data['severity'] = changes[:severity] if changes.has_key?(:severity) - rpc_data['alias'] = changes[:alias] if changes.has_key?(:alias) - rpc_data['assigned_to'] = changes[:assignee] if changes.has_key?(:assignee) - #rpc_data['cc'] = changes[:cc].to_a if changes.has_key?(:cc) TODO: add and remove - rpc_data['status'] = changes[:status] if changes.has_key?(:status) - rpc_data['whiteboard'] = changes[:whiteboard] if changes.has_key?(:whiteboard) - rpc_data['url'] = changes[:url] if changes.has_key?(:url) - rpc_data['resolution'] = changes[:resolution] if changes.has_key?(:resolution) - rpc_data['Bugzilla_token'] = token - - result = client.call('Bug.update', rpc_data) - result['bugs'].first - rescue XMLRPC::FaultException => e - if did_retry - raise "Could not file the bug: #{e.faultString} (code #{e.faultCode})" - end - - # If we need to log in first - if e.faultCode == 410 - Rails.logger.debug "Not logged in, doing that now." - log_in - did_retry = true - retry - else - raise "Could not file the bug: #{e.faultString} (code #{e.faultCode})" - end - end - end - - # Files a bug, and returns the id of the filed bug - def file_bug(data) - if GLSAMAKER_BUGZIE_SKIP - Rails.logger.info 'Skipped Bugzilla.file_bug' - return - end - - Rails.logger.debug 'Called Bugzilla.file_bug' - did_retry = false - - begin - client, token = xmlrpc_client - - rpc_data = {} - rpc_data['component'] = data[:component] if data.has_key?(:component) - rpc_data['product'] = data[:product] if data.has_key?(:product) - rpc_data['summary'] = data[:summary] if data.has_key?(:summary) - rpc_data['version'] = data[:version] if data.has_key?(:version) - rpc_data['description'] = data[:comment] if data.has_key?(:comment) - rpc_data['priority'] = data[:priority] if data.has_key?(:priority) - rpc_data['severity'] = data[:severity] if data.has_key?(:severity) - rpc_data['alias'] = data[:alias] if data.has_key?(:alias) - rpc_data['assigned_to'] = data[:assignee] if data.has_key?(:assignee) - rpc_data['cc'] = data[:cc].to_a if data.has_key?(:cc) - rpc_data['status'] = data[:status] if data.has_key?(:status) - rpc_data['Bugzilla_token'] = token - - result = client.call('Bug.create', rpc_data) - result['id'] - rescue XMLRPC::FaultException => e - if did_retry - raise "Could not file the bug: #{e.faultString} (code #{e.faultCode})" - end - - # If we need to log in first - if e.faultCode == 410 - Rails.logger.debug "Not logged in, doing that now." - log_in - did_retry = true - retry - else - raise "Could not file the bug: #{e.faultString} (code #{e.faultCode})" - end - end - end - - def log_in - Rails.logger.debug "Called Bugzilla.log_in" - raise unless GLSAMAKER_BUGZIE_USER and GLSAMAKER_BUGZIE_PW - - client, token = xmlrpc_client - - begin - result = client.call('User.login', { - 'login' => GLSAMAKER_BUGZIE_USER, - 'password' => GLSAMAKER_BUGZIE_PW - }) - - Rails.logger.debug "Successfully logged in. UID: #{result['id']}" - - token_file = File.join(Rails.root, 'tmp', 'bugzie-token.txt') - FileUtils.rm(token_file) if File.exist?(token_file) - FileUtils.touch(token_file) - File.chmod(0600, token_file) - File.open(token_file, 'w') {|f| f.write result['token'] } - - return true - rescue XMLRPC::FaultException => e - Rails.logger.warn "Failure logging in: #{e.message}" - return false - end - end - - def xmlrpc_client - client = XMLRPC::Client.new(GLSAMAKER_BUGZIE_HOST, '/xmlrpc.cgi', 443, nil, nil, nil, nil, true) - client.http_header_extra = {'User-Agent' => "GLSAMaker/#{GLSAMAKER_VERSION} (https://security.gentoo.org/)"} - - token = '' - token_file = File.join(Rails.root, 'tmp', 'bugzie-token.txt') - if File.readable? token_file - token = File.read(token_file) - end - - [client, token] - end -end |