191 lines
4.4 KiB
Ruby
191 lines
4.4 KiB
Ruby
require 'rest-client'
|
|
require 'json'
|
|
require 'naught'
|
|
require 'pry'
|
|
|
|
module Gitea
|
|
|
|
class API
|
|
attr_accessor :api_key
|
|
attr_accessor :base_url
|
|
attr_accessor :http_headers
|
|
attr_accessor :rest_client
|
|
|
|
def initialize(api_key:, base_url:, rest_client: RestClient)
|
|
@api_key = api_key
|
|
@base_url = base_url
|
|
@http_headers = {
|
|
"Authorization" => "token #{api_key}",
|
|
"Content-Type" => "application/json",
|
|
"Accept" => "application/json",
|
|
}
|
|
@rest_client = rest_client
|
|
end
|
|
|
|
def create_issue(payload:, owner:, repo:, user:)
|
|
puts "Gitea::API.create_issue(owner: #{owner}, repo: #{repo})"
|
|
|
|
rest_client.post(
|
|
"#{base_url}/api/v1/repos/#{owner}/#{repo}/issues",
|
|
JSON.generate(payload),
|
|
http_headers.merge("Sudo" => user)
|
|
) { |response, request, result, &block|
|
|
case response.code
|
|
when 201
|
|
if response.body.empty?
|
|
{}
|
|
else
|
|
JSON.parse(response.body)
|
|
end
|
|
else
|
|
binding.pry
|
|
end
|
|
}
|
|
|
|
rescue => ex
|
|
binding.pry
|
|
end
|
|
|
|
def create_comment(payload:, issue:, owner:, repo:, user:)
|
|
puts "Gitea::API.create_comment(issue: #{issue}, owner: #{owner}, repo: #{repo})"
|
|
|
|
rest_client.post(
|
|
"#{base_url}/api/v1/repos/#{owner}/#{repo}/issues/#{issue}/comments",
|
|
JSON.generate(payload),
|
|
http_headers.merge("Sudo" => user)
|
|
) { |response, request, result, &block|
|
|
case response.code
|
|
when 201
|
|
if response.body.empty?
|
|
{}
|
|
else
|
|
JSON.parse(response.body)
|
|
end
|
|
else
|
|
binding.pry
|
|
end
|
|
}
|
|
rescue => ex
|
|
binding.pry
|
|
end
|
|
|
|
def get_repo(owner:, repo:)
|
|
puts "Gitea::API.get_repository(owner: #{owner}, repo: #{repo})"
|
|
|
|
rest_client.get(
|
|
"#{base_url}/api/v1/repos/#{owner}/#{repo}",
|
|
http_headers
|
|
) { |response, request, result, &block|
|
|
case response.code
|
|
when 200
|
|
Repository.new(JSON.parse(response.body))
|
|
else
|
|
NullRepository.new
|
|
end
|
|
}
|
|
rescue => ex
|
|
binding.pry
|
|
end
|
|
|
|
def create_user_repository(payload:, user:)
|
|
puts "Gitea::API.create_user_repository()"
|
|
|
|
rest_client.post(
|
|
"#{base_url}/api/v1/user/repos",
|
|
JSON.generate(payload),
|
|
http_headers.merge("Sudo" => user)
|
|
) { |response, request, result, &block|
|
|
case response.code
|
|
when 201
|
|
if response.body.empty?
|
|
{}
|
|
else
|
|
JSON.parse(response.body)
|
|
end
|
|
else
|
|
binding.pry
|
|
end
|
|
}
|
|
|
|
rescue => ex
|
|
binding.pry
|
|
end
|
|
|
|
def create_org_repository(payload:, org:)
|
|
puts "Gitea::API.create_org_repository(org: #{org})"
|
|
|
|
rest_client.post(
|
|
"#{base_url}/api/v1/orgs/#{org}/repos",
|
|
JSON.generate(payload),
|
|
http_headers
|
|
) { |response, request, result, &block|
|
|
case response.code
|
|
when 201
|
|
if response.body.empty?
|
|
{}
|
|
else
|
|
JSON.parse(response.body)
|
|
end
|
|
else
|
|
binding.pry
|
|
end
|
|
}
|
|
|
|
rescue => ex
|
|
binding.pry
|
|
end
|
|
|
|
def delete_repository(owner:, repo:)
|
|
puts "Gitea::API.delete_repository(owner: #{owner}, repo: #{repo})"
|
|
|
|
rest_client.delete(
|
|
"#{base_url}/api/v1/repos/#{owner}/#{repo}",
|
|
http_headers
|
|
) { |response, request, result, &block|
|
|
case response.code
|
|
when 204
|
|
nil
|
|
else
|
|
binding.pry
|
|
end
|
|
}
|
|
rescue => ex
|
|
binding.pry
|
|
end
|
|
|
|
def add_collaborator(payload: {}, owner:, repo:, collaborator:)
|
|
puts "Gitea::API.add_collaborator(owner: #{owner}, repo: #{repo}, collaborator: #{collaborator})"
|
|
|
|
rest_client.put(
|
|
"#{base_url}/api/v1/repos/#{owner}/#{repo}/collaborators/#{collaborator}",
|
|
JSON.generate(payload),
|
|
http_headers
|
|
) { |response, request, result, &block|
|
|
case response.code
|
|
when 204
|
|
nil
|
|
else
|
|
binding.pry
|
|
end
|
|
}
|
|
rescue => ex
|
|
binding.pry
|
|
end
|
|
end
|
|
|
|
class Repository
|
|
attr_reader :id
|
|
|
|
def initialize(repository)
|
|
@repository = repository
|
|
end
|
|
|
|
def id
|
|
@repository.fetch("id")
|
|
end
|
|
end
|
|
|
|
NullRepository = Naught.build
|
|
|
|
end
|