mirror of
https://gitlink.org.cn/Gitlink/forgeplus.git
synced 2026-05-03 20:00:49 +08:00
init project
This commit is contained in:
164
app/services/gitea/client_service.rb
Normal file
164
app/services/gitea/client_service.rb
Normal file
@@ -0,0 +1,164 @@
|
||||
class Gitea::ClientService < ApplicationService
|
||||
attr_reader :username, :secret, :token, :url, :params
|
||||
|
||||
def initialize(options={})
|
||||
@username = options[:username]
|
||||
@secret = options[:password]
|
||||
@token = options[:token]
|
||||
@url = options[:url]
|
||||
@params = options[:params]
|
||||
end
|
||||
|
||||
# params
|
||||
# EXA:
|
||||
# {
|
||||
# token: {},
|
||||
# data: {}
|
||||
# }
|
||||
def post(url, params={})
|
||||
puts "[gitea] request params: #{params}"
|
||||
request_url = [api_url, url].join('').freeze
|
||||
auth_token = authen_params(params[:token])
|
||||
response = conn(auth_token).post do |req|
|
||||
req.url "#{request_url}"
|
||||
req.body = params[:data].to_json
|
||||
end
|
||||
render_status(response)
|
||||
end
|
||||
|
||||
def get(url, params={})
|
||||
auth_token = authen_params(params[:token])
|
||||
conn(auth_token).get do |req|
|
||||
req.url full_url(url)
|
||||
params.except(:token).each_pair do |key, value|
|
||||
req.params["#{key}"] = value
|
||||
end
|
||||
end
|
||||
|
||||
# response.headers.each do |k,v|
|
||||
# puts "#{k}:#{v}"
|
||||
# end #=> 响应头
|
||||
end
|
||||
|
||||
def delete(url, params={})
|
||||
auth_token = authen_params(params[:token])
|
||||
conn(auth_token).delete do |req|
|
||||
req.url full_url(url)
|
||||
req.body = params[:data].to_json
|
||||
end
|
||||
end
|
||||
|
||||
def patch(url, params={})
|
||||
puts "[gitea] request params: #{params}"
|
||||
auth_token = authen_params(params[:token])
|
||||
conn(auth_token).patch do |req|
|
||||
req.url full_url(url)
|
||||
req.body = params[:data].to_json
|
||||
end
|
||||
end
|
||||
|
||||
def put(url, params={})
|
||||
puts "[gitea] put request params: #{params}"
|
||||
conn(authen_params(params[:token])).put do |req|
|
||||
req.url full_url(url)
|
||||
req.body = params[:data].to_json
|
||||
end
|
||||
end
|
||||
|
||||
private
|
||||
def conn(auth={})
|
||||
username = auth[:username] || access_key_id
|
||||
secret = auth[:password] || access_key_secret
|
||||
token = auth[:token]
|
||||
puts "[gitea] username: #{username}"
|
||||
puts "[gitea] secret: #{secret}"
|
||||
puts "[gitea] token: #{token}"
|
||||
|
||||
@client ||= begin
|
||||
Faraday.new(url: domain) do |req|
|
||||
req.request :url_encoded
|
||||
req.headers['Content-Type'] = 'application/json'
|
||||
req.response :logger # 显示日志
|
||||
req.adapter Faraday.default_adapter
|
||||
if token.blank?
|
||||
req.basic_auth(username, secret)
|
||||
else
|
||||
req.authorization :Bearer, token
|
||||
req.headers['Authorization']
|
||||
end
|
||||
end
|
||||
end
|
||||
@client
|
||||
end
|
||||
|
||||
def base_url
|
||||
Gitea.gitea_config[:base_url]
|
||||
end
|
||||
|
||||
def domain
|
||||
Gitea.gitea_config[:domain]
|
||||
end
|
||||
|
||||
def access_key_id
|
||||
Gitea.gitea_config[:access_key_id]
|
||||
end
|
||||
|
||||
def access_key_secret
|
||||
Gitea.gitea_config[:access_key_secret]
|
||||
end
|
||||
|
||||
def api_url
|
||||
[domain, base_url].join('')
|
||||
end
|
||||
|
||||
def full_url(api_rest)
|
||||
[api_url, api_rest].join('').freeze
|
||||
end
|
||||
|
||||
def render_status(response)
|
||||
mark = "[gitea] "
|
||||
case response.status
|
||||
when 201, 200, 202
|
||||
if response.body.size > 0
|
||||
JSON.parse(response&.body)
|
||||
else
|
||||
{status: 200}
|
||||
end
|
||||
when 401
|
||||
raise Error, mark + "401"
|
||||
when 422
|
||||
result = JSON.parse(response&.body)
|
||||
puts "[gitea] parse body: #{result}"
|
||||
# return {status: -1, message: result[0]}
|
||||
raise Error, result[0]
|
||||
when 204
|
||||
|
||||
puts "[gitea] "
|
||||
raise Error, "[gitea] delete ok"
|
||||
when 409
|
||||
message = "创建失败,请检查该分支合并是否已存在"
|
||||
raise Error, mark + message
|
||||
else
|
||||
if response&.body.blank?
|
||||
message = "请求失败"
|
||||
else
|
||||
result = JSON.parse(response&.body)
|
||||
message = result['message']
|
||||
end
|
||||
raise Error, mark + message
|
||||
end
|
||||
end
|
||||
|
||||
def authen_params(token)
|
||||
(token.is_a? String) ? {token: token} : Hash(token)
|
||||
end
|
||||
|
||||
def render_data(response)
|
||||
case response.status
|
||||
when 201, 200
|
||||
JSON.parse(response.body)
|
||||
else
|
||||
nil
|
||||
end
|
||||
end
|
||||
end
|
||||
29
app/services/gitea/labels/create_service.rb
Normal file
29
app/services/gitea/labels/create_service.rb
Normal file
@@ -0,0 +1,29 @@
|
||||
class Gitea::Labels::CreateService < Gitea::ClientService
|
||||
attr_reader :user, :repo, :params
|
||||
|
||||
# params ex:
|
||||
# {
|
||||
# name: 'pull request title',
|
||||
# description: 'pull request content',
|
||||
# color: '#ffff',
|
||||
# }
|
||||
# repo: 仓库名称
|
||||
def initialize(user, repo, params={})
|
||||
@user = user
|
||||
@repo = repo
|
||||
@params = params
|
||||
end
|
||||
|
||||
def call
|
||||
post(url, request_params)
|
||||
end
|
||||
|
||||
private
|
||||
def url
|
||||
"/repos/#{user.login}/#{repo}/labels".freeze
|
||||
end
|
||||
|
||||
def request_params
|
||||
Hash.new.merge(token: user.gitea_token, data: params)
|
||||
end
|
||||
end
|
||||
39
app/services/gitea/labels/delete_service.rb
Normal file
39
app/services/gitea/labels/delete_service.rb
Normal file
@@ -0,0 +1,39 @@
|
||||
class Gitea::Labels::DeleteService < Gitea::ClientService
|
||||
attr_reader :user, :repo_name,:label_id
|
||||
|
||||
def initialize(user, repo_name, label_id)
|
||||
@user = user
|
||||
@repo_name = repo_name
|
||||
@label_id = label_id
|
||||
end
|
||||
|
||||
def call
|
||||
response = delete(url, params)
|
||||
render_result(response)
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def params
|
||||
Hash.new.merge(token: user.gitea_token)
|
||||
end
|
||||
|
||||
def url
|
||||
"/repos/#{user.login}/#{repo_name}/labels/#{label_id}".freeze
|
||||
end
|
||||
|
||||
def render_result(response)
|
||||
return_body = response.body
|
||||
if return_body.present?
|
||||
body = JSON.parse(response.body)
|
||||
else
|
||||
body = []
|
||||
end
|
||||
case response.status
|
||||
when 204
|
||||
body
|
||||
else
|
||||
{status: -1, message: "#{body['message'] if body.present?}"}
|
||||
end
|
||||
end
|
||||
end
|
||||
32
app/services/gitea/labels/list_service.rb
Normal file
32
app/services/gitea/labels/list_service.rb
Normal file
@@ -0,0 +1,32 @@
|
||||
class Gitea::Labels::ListService < Gitea::ClientService
|
||||
attr_reader :user, :repo_name
|
||||
|
||||
|
||||
def initialize(user, repo_name)
|
||||
@user = user
|
||||
@repo_name = repo_name
|
||||
end
|
||||
|
||||
def call
|
||||
response = get(url, params)
|
||||
render_result(response)
|
||||
end
|
||||
|
||||
private
|
||||
def params
|
||||
Hash.new.merge(token: user.gitea_token)
|
||||
end
|
||||
|
||||
def url
|
||||
"/repos/#{user.login}/#{repo_name}/labels".freeze
|
||||
end
|
||||
|
||||
def render_result(response)
|
||||
body = JSON.parse(response.body)
|
||||
case response.status
|
||||
when 200 then body
|
||||
else
|
||||
{status: -1, message: "#{body['message']}"}
|
||||
end
|
||||
end
|
||||
end
|
||||
30
app/services/gitea/labels/update_service.rb
Normal file
30
app/services/gitea/labels/update_service.rb
Normal file
@@ -0,0 +1,30 @@
|
||||
class Gitea::Labels::UpdateService < Gitea::ClientService
|
||||
attr_reader :user, :repo,:label_id, :params
|
||||
|
||||
# params ex:
|
||||
# {
|
||||
# name: 'pull request title',
|
||||
# description: 'pull request content',
|
||||
# color: '#ffff',
|
||||
# }
|
||||
# repo: 仓库名称
|
||||
def initialize(user, repo,label_id, params={})
|
||||
@user = user
|
||||
@repo = repo
|
||||
@params = params
|
||||
@label_id = label_id
|
||||
end
|
||||
|
||||
def call
|
||||
put(url, request_params)
|
||||
end
|
||||
|
||||
private
|
||||
def url
|
||||
"/repos/#{user.login}/#{repo}/labels/#{label_id}".freeze
|
||||
end
|
||||
|
||||
def request_params
|
||||
Hash.new.merge(token: user.gitea_token, data: params)
|
||||
end
|
||||
end
|
||||
35
app/services/gitea/pull_request/check_service.rb
Normal file
35
app/services/gitea/pull_request/check_service.rb
Normal file
@@ -0,0 +1,35 @@
|
||||
# Check if a pull request has been merged
|
||||
class Gitea::PullRequest::CheckService < Gitea::ClientService
|
||||
attr_reader :user, :repo, :pull_request_id
|
||||
|
||||
# user: 用户
|
||||
# repo: 仓库名称/标识
|
||||
# pull_request_id: pull request主键id
|
||||
def initialize(user, repo, pull_request_id)
|
||||
super({token: user.gitea_token})
|
||||
@user = user
|
||||
@repo = repo
|
||||
@pull_request_id = pull_request_id
|
||||
end
|
||||
|
||||
def call
|
||||
response = get(url, params)
|
||||
render_response(response)
|
||||
end
|
||||
|
||||
private
|
||||
def params
|
||||
Hash.new.merge(token: user.gitea_token)
|
||||
end
|
||||
|
||||
def url
|
||||
"/repos/#{user.login}/#{repo}/pulls/#{pull_request_id}/merge".freeze
|
||||
end
|
||||
|
||||
def render_response(response)
|
||||
case response.status
|
||||
when 204 then true
|
||||
when 404 then false
|
||||
end
|
||||
end
|
||||
end
|
||||
34
app/services/gitea/pull_request/create_service.rb
Normal file
34
app/services/gitea/pull_request/create_service.rb
Normal file
@@ -0,0 +1,34 @@
|
||||
|
||||
class Gitea::PullRequest::CreateService < Gitea::ClientService
|
||||
attr_reader :user, :repo, :params
|
||||
|
||||
# params ex:
|
||||
# {
|
||||
# title: 'pull request title',
|
||||
# body: 'pull request content',
|
||||
# head: 'develop', // from branch 源分支
|
||||
# base: 'master' // to branch 目标分支
|
||||
# }
|
||||
# 以上列子说明从develop分支合并到master分支
|
||||
# repo: 仓库名称
|
||||
def initialize(user, repo, params={})
|
||||
@user = user
|
||||
@repo = repo
|
||||
@params = params
|
||||
end
|
||||
|
||||
def call
|
||||
post(url, request_params)
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
|
||||
def url
|
||||
"/repos/#{@user.login}/#{@repo}/pulls".freeze
|
||||
end
|
||||
|
||||
def request_params
|
||||
Hash.new.merge(token: @user.gitea_token, data: @params)
|
||||
end
|
||||
end
|
||||
37
app/services/gitea/pull_request/get_service.rb
Normal file
37
app/services/gitea/pull_request/get_service.rb
Normal file
@@ -0,0 +1,37 @@
|
||||
# Get a pull request
|
||||
class Gitea::PullRequest::GetService < Gitea::ClientService
|
||||
attr_reader :user, :repo, :pull_request_id
|
||||
|
||||
# user: 用户
|
||||
# repo: 仓库名称/标识
|
||||
# pull_request_id: pull request主键id
|
||||
def initialize(user, repo, pull_request_id)
|
||||
super({token: user.gitea_token})
|
||||
@user = user
|
||||
@repo = repo
|
||||
@pull_request_id = pull_request_id
|
||||
end
|
||||
|
||||
def call
|
||||
response = get(url, params)
|
||||
render_result(response)
|
||||
end
|
||||
|
||||
private
|
||||
def params
|
||||
Hash.new.merge(token: user.gitea_token)
|
||||
end
|
||||
|
||||
def url
|
||||
"/repos/#{user.login}/#{repo}/pulls/#{pull_request_id}".freeze
|
||||
end
|
||||
|
||||
def render_result(response)
|
||||
case response.status
|
||||
when 200
|
||||
JSON.parse(response.body)
|
||||
else
|
||||
nil
|
||||
end
|
||||
end
|
||||
end
|
||||
34
app/services/gitea/pull_request/list_service.rb
Normal file
34
app/services/gitea/pull_request/list_service.rb
Normal file
@@ -0,0 +1,34 @@
|
||||
# Get a list of all commits from a repository
|
||||
class Gitea::PullRequest::ListService < Gitea::ClientService
|
||||
attr_reader :user, :repo
|
||||
|
||||
# sha: SHA or branch to start listing commits from (usually 'master')
|
||||
def initialize(user, repo)
|
||||
@user = user
|
||||
@repo = repo
|
||||
end
|
||||
|
||||
def call
|
||||
response = get(url, params)
|
||||
render_result(response)
|
||||
end
|
||||
|
||||
private
|
||||
def params
|
||||
Hash.new.merge(token: user.gitea_token)
|
||||
end
|
||||
|
||||
def url
|
||||
"/repos/#{@user.try(:login)}/#{@repo}/pulls".freeze
|
||||
end
|
||||
|
||||
def render_result(response)
|
||||
body = JSON.parse(response.body)
|
||||
case response.status
|
||||
when 200
|
||||
body
|
||||
else
|
||||
{status: -1, message: "#{body['message']}"}
|
||||
end
|
||||
end
|
||||
end
|
||||
31
app/services/gitea/pull_request/merge_service.rb
Normal file
31
app/services/gitea/pull_request/merge_service.rb
Normal file
@@ -0,0 +1,31 @@
|
||||
# Merge a pull request
|
||||
class Gitea::PullRequest::MergeService < Gitea::ClientService
|
||||
attr_reader :user, :repo, :pull_request_id, :params
|
||||
|
||||
# parameters:
|
||||
# repo: name of the repo
|
||||
# pull_request_id: index of the pull request to merge
|
||||
# params:
|
||||
# title: merge标题
|
||||
# message: merge说明
|
||||
def initialize(user, repo, pull_request_id, params={})
|
||||
@user = user
|
||||
@repo = repo
|
||||
@params = params
|
||||
@pull_request_id = pull_request_id
|
||||
end
|
||||
|
||||
def call
|
||||
post(url, request_params)
|
||||
end
|
||||
|
||||
private
|
||||
def url
|
||||
"/repos/#{user.login}/#{repo}/pulls/#{pull_request_id}/merge"
|
||||
end
|
||||
|
||||
def request_params
|
||||
Hash.new.merge(token: user.gitea_token, data: params)
|
||||
end
|
||||
|
||||
end
|
||||
26
app/services/gitea/pull_request/update_service.rb
Normal file
26
app/services/gitea/pull_request/update_service.rb
Normal file
@@ -0,0 +1,26 @@
|
||||
class Gitea::PullRequest::UpdateService < Gitea::ClientService
|
||||
attr_reader :user, :repo, :params,:pull_request_id
|
||||
|
||||
|
||||
def initialize(user, repo, params,pull_request_id)
|
||||
@user = user
|
||||
@repo = repo
|
||||
@params = params
|
||||
@pull_request_id = pull_request_id
|
||||
end
|
||||
|
||||
def call
|
||||
put(url, request_params)
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def request_params
|
||||
Hash.new.merge(token: @user.gitea_token, data: @params)
|
||||
end
|
||||
|
||||
def url
|
||||
"/repos/#{@user.try(:login)}/#{@repo}/pulls/#{@pull_request_id}".freeze
|
||||
end
|
||||
|
||||
end
|
||||
22
app/services/gitea/repository/branches_service.rb
Normal file
22
app/services/gitea/repository/branches_service.rb
Normal file
@@ -0,0 +1,22 @@
|
||||
class Gitea::Repository::BranchesService < Gitea::ClientService
|
||||
attr_reader :user, :repo
|
||||
|
||||
def initialize(user, repo)
|
||||
@user = user
|
||||
@repo = repo
|
||||
end
|
||||
|
||||
def call
|
||||
response = get(url, params)
|
||||
render_data(response)
|
||||
end
|
||||
|
||||
private
|
||||
def params
|
||||
Hash.new.merge(token: user.gitea_token)
|
||||
end
|
||||
|
||||
def url
|
||||
"/repos/#{user.login}/#{repo}/branches".freeze
|
||||
end
|
||||
end
|
||||
35
app/services/gitea/repository/commits/get_service.rb
Normal file
35
app/services/gitea/repository/commits/get_service.rb
Normal file
@@ -0,0 +1,35 @@
|
||||
# Get a single commit from a repository
|
||||
class Gitea::Repository::Commits::GetService < Gitea::ClientService
|
||||
attr_reader :user, :repo_name, :sha
|
||||
|
||||
# sha: the commit hash
|
||||
def initialize(user, repo_name, sha)
|
||||
@user = user
|
||||
@sha = sha
|
||||
@repo_name = repo_name
|
||||
end
|
||||
|
||||
def call
|
||||
response = get(url, params)
|
||||
render_result(response)
|
||||
end
|
||||
|
||||
private
|
||||
def params
|
||||
Hash.new.merge(token: user.gitea_token)
|
||||
end
|
||||
|
||||
def url
|
||||
"/repos/#{user.login}/#{repo_name}/git/commits/#{sha}".freeze
|
||||
end
|
||||
|
||||
def render_result(response)
|
||||
body = JSON.parse(response.body)
|
||||
case response.status
|
||||
when 200
|
||||
JSON.parse(response.body)
|
||||
else
|
||||
{status: -1, message: "#{body['message']}"}
|
||||
end
|
||||
end
|
||||
end
|
||||
39
app/services/gitea/repository/commits/list_service.rb
Normal file
39
app/services/gitea/repository/commits/list_service.rb
Normal file
@@ -0,0 +1,39 @@
|
||||
# Get a list of all commits from a repository
|
||||
class Gitea::Repository::Commits::ListService < Gitea::ClientService
|
||||
attr_reader :user, :repo_name, :args
|
||||
|
||||
# sha: SHA or branch to start listing commits from (usually 'master')
|
||||
def initialize(user, repo_name, **args)
|
||||
@user = user
|
||||
@repo_name = repo_name
|
||||
@args = { sha: 'master', page: 1 }.merge(args.compact)
|
||||
end
|
||||
|
||||
def call
|
||||
response = get(url, params)
|
||||
render_result(response)
|
||||
end
|
||||
|
||||
private
|
||||
def params
|
||||
@args.merge(token: user.gitea_token)
|
||||
end
|
||||
|
||||
def url
|
||||
"/repos/#{user.login}/#{repo_name}/commits".freeze
|
||||
end
|
||||
|
||||
def render_result(response)
|
||||
body = JSON.parse(response.body)
|
||||
case response.status
|
||||
when 200
|
||||
result = {}
|
||||
headers = response.headers.to_hash
|
||||
body = JSON.parse(response.body)
|
||||
total_count = headers["x-total"]
|
||||
result.merge(total_count: total_count.to_i, body: body)
|
||||
else
|
||||
{status: -1, message: "#{body['message']}"}
|
||||
end
|
||||
end
|
||||
end
|
||||
34
app/services/gitea/repository/create_service.rb
Normal file
34
app/services/gitea/repository/create_service.rb
Normal file
@@ -0,0 +1,34 @@
|
||||
class Gitea::Repository::CreateService < Gitea::ClientService
|
||||
attr_reader :token, :params
|
||||
|
||||
# params EX:
|
||||
# {
|
||||
# "auto_init": true,
|
||||
# "description": "string",
|
||||
# "gitignores": "string",
|
||||
# "issue_labels": "string",
|
||||
# "license": "string",
|
||||
# "name": "string", *
|
||||
# "private": true,
|
||||
# "readme": "string"
|
||||
# }
|
||||
def initialize(token, params)
|
||||
@token = token
|
||||
@params = params
|
||||
end
|
||||
|
||||
def call
|
||||
post(url, request_params)
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def request_params
|
||||
Hash.new.merge(token: token, data: params)
|
||||
end
|
||||
|
||||
def url
|
||||
"/user/repos".freeze
|
||||
end
|
||||
|
||||
end
|
||||
22
app/services/gitea/repository/delete_service.rb
Normal file
22
app/services/gitea/repository/delete_service.rb
Normal file
@@ -0,0 +1,22 @@
|
||||
class Gitea::Repository::DeleteService < Gitea::ClientService
|
||||
attr_reader :user, :repo_name
|
||||
|
||||
def initialize(user, repo_name)
|
||||
@user = user
|
||||
@repo_name = repo_name
|
||||
end
|
||||
|
||||
def call
|
||||
delete(url, params)
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def params
|
||||
Hash.new.merge(token: user.gitea_token)
|
||||
end
|
||||
|
||||
def url
|
||||
"/repos/#{user.login}/#{repo_name}".freeze
|
||||
end
|
||||
end
|
||||
43
app/services/gitea/repository/entries/create_service.rb
Normal file
43
app/services/gitea/repository/entries/create_service.rb
Normal file
@@ -0,0 +1,43 @@
|
||||
class Gitea::Repository::Entries::CreateService < Gitea::ClientService
|
||||
attr_reader :user, :repo_name, :filepath, :body
|
||||
|
||||
# ref: The name of the commit/branch/tag. Default the repository’s default branch (usually master)
|
||||
# filepath: path of the dir, file, symlink or submodule in the repo
|
||||
# repo_name: the name of repository
|
||||
# body:
|
||||
# {
|
||||
# "author": {
|
||||
# "email": "user@example.com",
|
||||
# "name": "string"
|
||||
# },
|
||||
# "branch": "string",
|
||||
# "committer": {
|
||||
# "email": "user@example.com",
|
||||
# "name": "string"
|
||||
# },
|
||||
# "content": "string", # content must be base64 encoded
|
||||
# "message": "string",
|
||||
# "new_branch": "string"
|
||||
# }
|
||||
#
|
||||
def initialize(user, repo_name, filepath, body)
|
||||
@user = user
|
||||
@repo_name = repo_name
|
||||
@filepath = filepath
|
||||
@body = body
|
||||
end
|
||||
|
||||
def call
|
||||
post(url, params)
|
||||
end
|
||||
|
||||
private
|
||||
def params
|
||||
Hash.new.merge(token: user.gitea_token, data: body)
|
||||
end
|
||||
|
||||
def url
|
||||
"/repos/#{user.login}/#{repo_name}/contents/#{filepath}".freeze
|
||||
end
|
||||
|
||||
end
|
||||
42
app/services/gitea/repository/entries/delete_service.rb
Normal file
42
app/services/gitea/repository/entries/delete_service.rb
Normal file
@@ -0,0 +1,42 @@
|
||||
class Gitea::Repository::Entries::DeleteService < Gitea::ClientService
|
||||
attr_reader :user, :repo_name, :filepath, :body
|
||||
|
||||
# ref: The name of the commit/branch/tag. Default the repository’s default branch (usually master)
|
||||
# filepath: path of the dir, file, symlink or submodule in the repo
|
||||
# repo_name: the name of repository
|
||||
# body:
|
||||
# {
|
||||
# "author": {
|
||||
# "email": "user@example.com",
|
||||
# "name": "string"
|
||||
# },
|
||||
# "branch": "string",
|
||||
# "committer": {
|
||||
# "email": "user@example.com",
|
||||
# "name": "string"
|
||||
# },
|
||||
# "message": "string",
|
||||
# "new_branch": "string",
|
||||
# "sha": "string", #require
|
||||
# }
|
||||
def initialize(user, repo_name, filepath, body)
|
||||
@user = user
|
||||
@repo_name = repo_name
|
||||
@filepath = filepath
|
||||
@body = body
|
||||
end
|
||||
|
||||
def call
|
||||
delete(url, params)
|
||||
end
|
||||
|
||||
private
|
||||
def params
|
||||
Hash.new.merge(token: user.gitea_token, data: body)
|
||||
end
|
||||
|
||||
def url
|
||||
"/repos/#{user.login}/#{repo_name}/contents/#{filepath}".freeze
|
||||
end
|
||||
|
||||
end
|
||||
38
app/services/gitea/repository/entries/get_service.rb
Normal file
38
app/services/gitea/repository/entries/get_service.rb
Normal file
@@ -0,0 +1,38 @@
|
||||
class Gitea::Repository::Entries::GetService < Gitea::ClientService
|
||||
attr_reader :user, :repo_name, :filepath, :args
|
||||
|
||||
# ref: The name of the commit/branch/tag. Default the repository’s default branch (usually master)
|
||||
# filepath: path of the dir, file, symlink or submodule in the repo
|
||||
# repo_name: the name of repository
|
||||
# ref: The name of the commit/branch/tag. Default the repository’s default branch (usually master)
|
||||
def initialize(user, repo_name, filepath, **args)
|
||||
@user = user
|
||||
@repo_name = repo_name
|
||||
@filepath = filepath
|
||||
@args = {ref: 'master'}.merge(args.compact)
|
||||
end
|
||||
|
||||
def call
|
||||
response = get(url, params)
|
||||
render_result(response)
|
||||
end
|
||||
|
||||
private
|
||||
def params
|
||||
@args.merge(token: user.gitea_token)
|
||||
end
|
||||
|
||||
def url
|
||||
"/repos/#{user.login}/#{repo_name}/contents/#{filepath}".freeze
|
||||
end
|
||||
|
||||
def render_result(response)
|
||||
body = JSON.parse(response.body)
|
||||
case response.status
|
||||
when 200
|
||||
body
|
||||
else
|
||||
{status: -1, message: "#{body['message']}"}
|
||||
end
|
||||
end
|
||||
end
|
||||
35
app/services/gitea/repository/entries/list_service.rb
Normal file
35
app/services/gitea/repository/entries/list_service.rb
Normal file
@@ -0,0 +1,35 @@
|
||||
class Gitea::Repository::Entries::ListService < Gitea::ClientService
|
||||
attr_reader :user, :repo_name, :args
|
||||
|
||||
# ref: The name of the commit/branch/tag. Default the repository’s default branch (usually master)
|
||||
# repo_name: the name of repository
|
||||
def initialize(user, repo_name, **args)
|
||||
@user = user
|
||||
@repo_name = repo_name
|
||||
@args = {ref: 'master'}.merge(args.compact)
|
||||
end
|
||||
|
||||
def call
|
||||
response = get(url, params)
|
||||
render_result(response)
|
||||
end
|
||||
|
||||
private
|
||||
def params
|
||||
@args.merge(token: user.gitea_token)
|
||||
end
|
||||
|
||||
def url
|
||||
"/repos/#{user.login}/#{repo_name}/contents".freeze
|
||||
end
|
||||
|
||||
def render_result(response)
|
||||
body = JSON.parse(response.body)
|
||||
case response.status
|
||||
when 200
|
||||
body
|
||||
else
|
||||
{status: -1, message: "#{body['message']}"}
|
||||
end
|
||||
end
|
||||
end
|
||||
43
app/services/gitea/repository/entries/update_service.rb
Normal file
43
app/services/gitea/repository/entries/update_service.rb
Normal file
@@ -0,0 +1,43 @@
|
||||
class Gitea::Repository::Entries::UpdateService < Gitea::ClientService
|
||||
attr_reader :user, :repo_name, :filepath, :body
|
||||
|
||||
# ref: The name of the commit/branch/tag. Default the repository’s default branch (usually master)
|
||||
# filepath: path of the dir, file, symlink or submodule in the repo
|
||||
# repo_name: the name of repository
|
||||
# body:
|
||||
# {
|
||||
# "author": {
|
||||
# "email": "user@example.com",
|
||||
# "name": "string"
|
||||
# },
|
||||
# "branch": "string",
|
||||
# "committer": {
|
||||
# "email": "user@example.com",
|
||||
# "name": "string"
|
||||
# },
|
||||
# "content": "string", # content must be base64 encoded
|
||||
# "message": "string",
|
||||
# "new_branch": "string"
|
||||
# }
|
||||
#
|
||||
def initialize(user, repo_name, filepath, body)
|
||||
@user = user
|
||||
@repo_name = repo_name
|
||||
@filepath = filepath
|
||||
@body = body
|
||||
end
|
||||
|
||||
def call
|
||||
put(url, params)
|
||||
end
|
||||
|
||||
private
|
||||
def params
|
||||
Hash.new.merge(token: user.gitea_token, data: body)
|
||||
end
|
||||
|
||||
def url
|
||||
"/repos/#{user.login}/#{repo_name}/contents/#{filepath}".freeze
|
||||
end
|
||||
|
||||
end
|
||||
32
app/services/gitea/repository/fork_service.rb
Normal file
32
app/services/gitea/repository/fork_service.rb
Normal file
@@ -0,0 +1,32 @@
|
||||
class Gitea::Repository::ForkService < Gitea::ClientService
|
||||
attr_reader :old_owner, :target_owner, :repo_name, :organization
|
||||
|
||||
# old_owner: 被clone的项目(源项目)拥有者
|
||||
# target_owner: clone后的醒目(新项目)的拥有者
|
||||
# body:
|
||||
# {
|
||||
# "organization": "string" #组织名称
|
||||
# }
|
||||
def initialize(old_owner, target_owner, repo_name, organization=nil)
|
||||
@old_owner = old_owner
|
||||
@target_owner = target_owner
|
||||
@repo_name = repo_name
|
||||
end
|
||||
|
||||
def call
|
||||
post(url, request_params)
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def request_params
|
||||
hash = Hash.new.merge(token: target_owner.gitea_token)
|
||||
hash = hash.merge(data: {organization: organization}) if organization
|
||||
hash
|
||||
end
|
||||
|
||||
def url
|
||||
"/repos/#{old_owner.login}/#{repo_name}/forks".freeze
|
||||
end
|
||||
|
||||
end
|
||||
31
app/services/gitea/repository/get_service.rb
Normal file
31
app/services/gitea/repository/get_service.rb
Normal file
@@ -0,0 +1,31 @@
|
||||
class Gitea::Repository::GetService < Gitea::ClientService
|
||||
attr_reader :user, :repo_name
|
||||
|
||||
def initialize(user, repo_name)
|
||||
@user = user
|
||||
@repo_name = repo_name
|
||||
end
|
||||
|
||||
def call
|
||||
response = get(url, params)
|
||||
render_result(response)
|
||||
end
|
||||
|
||||
private
|
||||
def params
|
||||
Hash.new.merge(token: user.gitea_token)
|
||||
end
|
||||
|
||||
def url
|
||||
"/repos/#{user.login}/#{repo_name}".freeze
|
||||
end
|
||||
|
||||
def render_result(response)
|
||||
case response.status
|
||||
when 200
|
||||
JSON.parse(response.body)
|
||||
else
|
||||
nil
|
||||
end
|
||||
end
|
||||
end
|
||||
28
app/services/gitea/repository/members/add_service.rb
Normal file
28
app/services/gitea/repository/members/add_service.rb
Normal file
@@ -0,0 +1,28 @@
|
||||
# 添加协作者/或者更改协作这的可读写权限
|
||||
class Gitea::Repository::Members::AddService < Gitea::ClientService
|
||||
attr_reader :owner, :repo_name, :collaborator, :permission
|
||||
|
||||
# owner: owner of the repo
|
||||
# repo_name: name of the repo
|
||||
# collaborator: username of the collaborator
|
||||
# permission: permission name, FIX: admin | read | write
|
||||
def initialize(owner, repo_name, collaborator, permission)
|
||||
@owner = owner
|
||||
@repo_name = repo_name
|
||||
@collaborator = collaborator
|
||||
@permission = permission
|
||||
end
|
||||
|
||||
def call
|
||||
put(url, params)
|
||||
end
|
||||
|
||||
private
|
||||
def params
|
||||
Hash.new.merge(token: owner.gitea_token, data: {permission: permission})
|
||||
end
|
||||
|
||||
def url
|
||||
"/repos/#{owner.login}/#{repo_name}/collaborators/#{collaborator}".freeze
|
||||
end
|
||||
end
|
||||
25
app/services/gitea/repository/members/delete_service.rb
Normal file
25
app/services/gitea/repository/members/delete_service.rb
Normal file
@@ -0,0 +1,25 @@
|
||||
class Gitea::Repository::Members::DeleteService < Gitea::ClientService
|
||||
attr_reader :owner, :repo_name, :collaborator
|
||||
|
||||
# owner: owner of the repo
|
||||
# repo_name: name of the repo
|
||||
# collaborator: username of the collaborator
|
||||
def initialize(owner, repo_name, collaborator)
|
||||
@owner = owner
|
||||
@repo_name = repo_name
|
||||
@collaborator = collaborator
|
||||
end
|
||||
|
||||
def call
|
||||
delete(url, params)
|
||||
end
|
||||
|
||||
private
|
||||
def params
|
||||
Hash.new.merge(token: owner.gitea_token)
|
||||
end
|
||||
|
||||
def url
|
||||
"/repos/#{owner.login}/#{repo_name}/collaborators/#{collaborator}".freeze
|
||||
end
|
||||
end
|
||||
47
app/services/gitea/repository/migrate_service.rb
Normal file
47
app/services/gitea/repository/migrate_service.rb
Normal file
@@ -0,0 +1,47 @@
|
||||
class Gitea::Repository::MigrateService < Gitea::ClientService
|
||||
attr_reader :token, :params
|
||||
|
||||
# params description:
|
||||
# {
|
||||
# auth_username string
|
||||
# clone_addr* string #clone地址
|
||||
# description string
|
||||
# issues boolean
|
||||
# labels boolean
|
||||
# milestones boolean
|
||||
# mirror boolean
|
||||
# private boolean
|
||||
# pull_requests boolean
|
||||
# releases boolean
|
||||
# repo_name* string #仓库名称
|
||||
# uid* integer($int64) #gitea用户id或组织id
|
||||
# wiki boolean
|
||||
# }
|
||||
# EX:
|
||||
# params = {
|
||||
# clone_addr: 'xxx.com',
|
||||
# repo_name: 'repo_name',
|
||||
# uid: 2,
|
||||
# private: false
|
||||
# }
|
||||
|
||||
def initialize(token, params)
|
||||
@token = token
|
||||
@params = params
|
||||
end
|
||||
|
||||
def call
|
||||
post(url, request_params)
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def request_params
|
||||
Hash.new.merge(token: token, data: params)
|
||||
end
|
||||
|
||||
def url
|
||||
"/repos/migrate".freeze
|
||||
end
|
||||
|
||||
end
|
||||
33
app/services/gitea/repository/tags/list_service.rb
Normal file
33
app/services/gitea/repository/tags/list_service.rb
Normal file
@@ -0,0 +1,33 @@
|
||||
class Gitea::Repository::Tags::ListService < Gitea::ClientService
|
||||
attr_reader :user, :repo_name
|
||||
|
||||
# ref: The name of the commit/branch/tag. Default the repository’s default branch (usually master)
|
||||
# repo_name: the name of repository
|
||||
def initialize(user, repo_name)
|
||||
@user = user
|
||||
@repo_name = repo_name
|
||||
end
|
||||
|
||||
def call
|
||||
response = get(url, params)
|
||||
render_result(response)
|
||||
end
|
||||
|
||||
private
|
||||
def params
|
||||
Hash.new.merge(token: user.gitea_token)
|
||||
end
|
||||
|
||||
def url
|
||||
"/repos/#{user.login}/#{repo_name}/tags".freeze
|
||||
end
|
||||
|
||||
def render_result(response)
|
||||
body = JSON.parse(response.body)
|
||||
case response.status
|
||||
when 200 then body
|
||||
else
|
||||
{status: -1, message: "#{body['message']}"}
|
||||
end
|
||||
end
|
||||
end
|
||||
33
app/services/gitea/repository/update_service.rb
Normal file
33
app/services/gitea/repository/update_service.rb
Normal file
@@ -0,0 +1,33 @@
|
||||
class Gitea::Repository::UpdateService < Gitea::ClientService
|
||||
attr_reader :user, :repo, :params
|
||||
|
||||
# params:
|
||||
# {
|
||||
# name: 'name of the repository',
|
||||
# default_branch: 'sets the default branch for this repository.',
|
||||
# description: 'string a short description of the repository.',
|
||||
# private: 'boolean either true to make the repository private or false to make it public.',
|
||||
# has_issues: 'boolean either true to enable issues for this repository or false to disable them.',
|
||||
# has_pull_requests: 'boolean either true to allow pull requests, or false to prevent pull request.',
|
||||
# allow_merge_commits: 'boolean either true to allow merging pull requests with a merge commit, or false to prevent merging pull requests with merge commits. has_pull_requests must be true.'
|
||||
# }
|
||||
|
||||
def initialize(user, repo, params={})
|
||||
@user = user
|
||||
@repo = repo
|
||||
@params = params
|
||||
end
|
||||
|
||||
def call
|
||||
patch(url, data_params)
|
||||
end
|
||||
|
||||
private
|
||||
def url
|
||||
"/repos/#{user.login}/#{repo}"
|
||||
end
|
||||
|
||||
def data_params
|
||||
Hash.new.merge(token: user.gitea_token, data: params)
|
||||
end
|
||||
end
|
||||
28
app/services/gitea/user/generate_token_service.rb
Normal file
28
app/services/gitea/user/generate_token_service.rb
Normal file
@@ -0,0 +1,28 @@
|
||||
# 根据对应的用户名和秘密生成token
|
||||
class Gitea::User::GenerateTokenService < Gitea::ClientService
|
||||
attr_reader :username, :password
|
||||
|
||||
def initialize(username, password)
|
||||
@username = username
|
||||
@password = password
|
||||
end
|
||||
|
||||
def call
|
||||
params = {}
|
||||
url = "/users/#{username}/tokens".freeze
|
||||
params = params.merge(token: token_params, data: request_params)
|
||||
post(url, params)
|
||||
end
|
||||
|
||||
private
|
||||
def token_params
|
||||
{
|
||||
username: username,
|
||||
password: password
|
||||
}
|
||||
end
|
||||
|
||||
def request_params
|
||||
{ name: username }
|
||||
end
|
||||
end
|
||||
28
app/services/gitea/user/register_service.rb
Normal file
28
app/services/gitea/user/register_service.rb
Normal file
@@ -0,0 +1,28 @@
|
||||
class Gitea::User::RegisterService < Gitea::ClientService
|
||||
API_REST = "/admin/users"
|
||||
def initialize(options = {})
|
||||
options.each_pair do |key, value|
|
||||
instance_variable_set("@#{key}", value)
|
||||
end
|
||||
end
|
||||
|
||||
def call
|
||||
params = {}
|
||||
params = params.merge(data: user_params)
|
||||
post(API_REST, params)
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
attr_reader :email, :username, :password
|
||||
|
||||
def user_params
|
||||
{
|
||||
email: email,
|
||||
username: username,
|
||||
password: password,
|
||||
must_change_password: false #允许不更改秘密就可以登录
|
||||
}
|
||||
end
|
||||
|
||||
end
|
||||
34
app/services/gitea/versions/create_service.rb
Normal file
34
app/services/gitea/versions/create_service.rb
Normal file
@@ -0,0 +1,34 @@
|
||||
class Gitea::Versions::CreateService < Gitea::ClientService
|
||||
attr_reader :token, :user_name, :repo, :params
|
||||
|
||||
# params EX:
|
||||
# {
|
||||
# "body": "sylor", #user_name
|
||||
# "draft": false,
|
||||
# "name": "string",
|
||||
# "prerelease": true,
|
||||
# "tag_name": "string",
|
||||
# "target_commitish": "string"
|
||||
# }
|
||||
def initialize(token, user_name, repo, params)
|
||||
@token = token
|
||||
@params = params
|
||||
@user_name = user_name
|
||||
@repo = repo
|
||||
end
|
||||
|
||||
def call
|
||||
post(url, request_params)
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def request_params
|
||||
Hash.new.merge(token: token, data: params)
|
||||
end
|
||||
|
||||
def url
|
||||
"/repos/#{@user_name}/#{@repo}/releases".freeze
|
||||
end
|
||||
|
||||
end
|
||||
26
app/services/gitea/versions/delete_service.rb
Normal file
26
app/services/gitea/versions/delete_service.rb
Normal file
@@ -0,0 +1,26 @@
|
||||
class Gitea::Versions::DeleteService < Gitea::ClientService
|
||||
attr_reader :token, :user_name, :repo,:version_gid
|
||||
|
||||
def initialize(token, user_name, repo,version_gid)
|
||||
@token = token
|
||||
@user_name = user_name
|
||||
@repo = repo
|
||||
@version_gid = version_gid
|
||||
end
|
||||
|
||||
def call
|
||||
response = delete(url, params)
|
||||
return response
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def params
|
||||
Hash.new.merge(token: @token)
|
||||
end
|
||||
|
||||
def url
|
||||
"/repos/#{@user_name}/#{@repo}/releases/#{@version_gid}".freeze
|
||||
end
|
||||
|
||||
end
|
||||
35
app/services/gitea/versions/list_service.rb
Normal file
35
app/services/gitea/versions/list_service.rb
Normal file
@@ -0,0 +1,35 @@
|
||||
# Get a list of all commits from a repository
|
||||
class Gitea::Versions::ListService < Gitea::ClientService
|
||||
attr_reader :token, :user_name, :repo
|
||||
|
||||
# sha: SHA or branch to start listing commits from (usually 'master')
|
||||
def initialize(token, user_name, repo)
|
||||
@token = token
|
||||
@user_name = user_name
|
||||
@repo = repo
|
||||
end
|
||||
|
||||
def call
|
||||
response = get(url, params)
|
||||
render_result(response)
|
||||
end
|
||||
|
||||
private
|
||||
def params
|
||||
Hash.new.merge(token: token)
|
||||
end
|
||||
|
||||
def url
|
||||
"/repos/#{@user_name}/#{@repo}/releases".freeze
|
||||
end
|
||||
|
||||
def render_result(response)
|
||||
body = JSON.parse(response.body)
|
||||
case response.status
|
||||
when 200
|
||||
body
|
||||
else
|
||||
{status: -1, message: "#{body['message']}"}
|
||||
end
|
||||
end
|
||||
end
|
||||
35
app/services/gitea/versions/update_service.rb
Normal file
35
app/services/gitea/versions/update_service.rb
Normal file
@@ -0,0 +1,35 @@
|
||||
class Gitea::Versions::UpdateService < Gitea::ClientService
|
||||
attr_reader :token, :user_name, :repo, :params, :version_gid
|
||||
|
||||
# params EX:
|
||||
# {
|
||||
# "body": "sylor", #user_name
|
||||
# "draft": false,
|
||||
# "name": "string",
|
||||
# "prerelease": true,
|
||||
# "tag_name": "string",
|
||||
# "target_commitish": "string"
|
||||
# }
|
||||
def initialize(token, user_name, repo, params,version_gid)
|
||||
@token = token
|
||||
@params = params
|
||||
@user_name = user_name
|
||||
@repo = repo
|
||||
@version_gid = version_gid
|
||||
end
|
||||
|
||||
def call
|
||||
patch(url, request_params)
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def request_params
|
||||
Hash.new.merge(token: token, data: params)
|
||||
end
|
||||
|
||||
def url
|
||||
"/repos/#{@user_name}/#{@repo}/releases/#{@version_gid}".freeze
|
||||
end
|
||||
|
||||
end
|
||||
Reference in New Issue
Block a user