gitea-client 1.2.0 → 1.2.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 5e03268e71d8f489029b7581e2d8027acf0ba861dd46c5303963391bcc7dfa3b
4
- data.tar.gz: 0e4ad31b6bec7d2e0f2eb47813ac78715a47edc5ba721bcf53dcf901cfc4f612
3
+ metadata.gz: 2b75477f05c754a32a9fc8e41b1a31930f47d801b1ddda915bc743adf6c11440
4
+ data.tar.gz: d3bc6a211bd17fbd06f8fde913d6b2bcc8cd8cd1ce21b102da93f29dda25a7bc
5
5
  SHA512:
6
- metadata.gz: 7875a1285c452b7c64111befc0ee6bd0522606485f78af1f20dc1b0e211a573eed40a9c52cd2f842282db453a166ff0faacb228aee8ee76cd21de248496573e5
7
- data.tar.gz: 92763d71fb9dc0f55987756c3c604f0121e0fb201d2cd821ee9858a3e7d3d7b4fd13f1603588be7c5934cd6c79d018aa0cba0e61c6a6605fd2860fa9404cd766
6
+ metadata.gz: 25f5237e147d81e0d83c316028b61425ad4ce85b2a3ec397ca37ae33a776aa7f867f9be75388e0916cbfcf2e7a007a8263916e437544252e33dbc33a159b7cd7
7
+ data.tar.gz: 6924cf7e55139ac00733bede4f9160dc50998583634d0e1d6dd3a08c45b23d67565c7851061cbd11f790972534697644a43f2281bc2084b78c2a1ecfac68aee3
@@ -0,0 +1,13 @@
1
+ module Gitea
2
+ module Api
3
+ module Hat
4
+ module Admin
5
+
6
+ def patch_admin_users_by_username(username, opt = {})
7
+ @http.patch("/admin/users/#{username}", opt)
8
+ end
9
+
10
+ end # Admin
11
+ end # Hat
12
+ end # Api
13
+ end # Gitea
@@ -0,0 +1,48 @@
1
+ module Gitea
2
+ module Api
3
+ module Hat
4
+ class Client
5
+
6
+ # 构造Api client,用于操作Api数据
7
+ # @param opts [Hash] 构造client时的参数选项
8
+ # @option opts [string] domain [必填] gitea服务地址
9
+ # @option opts [string] hat_base_url [必填] api相对路径
10
+ # @option opts [string] admin_username [必填] 管理员账号
11
+ # @option opts [string] admin_password [必填] 管理员密码
12
+ # @option opts [string] username [选填] 用户账号
13
+ # @option opts [string] password [选填] 用户密码
14
+ # @option opts [string] gitea_token [选填] 用户token
15
+ def initialize(opts)
16
+ @config = Config.new(opts)
17
+ Gitea::Common::Logging.set_log_file(@config.log_filepath)
18
+ @http = Http.new(@config)
19
+ end
20
+
21
+ def config
22
+ @config
23
+ end
24
+
25
+ def config=(config)
26
+ unless config.is_a?(Gitea::Api::Hat::Config)
27
+ fail Exception, "load config failure!"
28
+ end
29
+ @config = config
30
+ @http = Http.new(config)
31
+ end
32
+
33
+ def token
34
+ @config.token
35
+ end
36
+
37
+ def token=(token)
38
+ @config.token = token
39
+ end
40
+
41
+ include Gitea::Api::Hat::Repository
42
+ include Gitea::Api::Hat::Users
43
+ include Gitea::Api::Hat::Organization
44
+ include Gitea::Api::Hat::Admin
45
+ end
46
+ end # Hat
47
+ end # Api
48
+ end # Gitea
@@ -0,0 +1,36 @@
1
+ module Gitea
2
+ module Api
3
+
4
+ module Hat
5
+ class Config < Common::Struct::Base
6
+ attrs :domain, :hat_base_url, :username, :password, :token, :open_timeout, :read_timeout, :log_filepath
7
+
8
+ def initialize(opts = {})
9
+ super(opts)
10
+
11
+ valid!
12
+ normalize_domain
13
+ end
14
+
15
+ private
16
+ def valid!
17
+ if @domain.nil? || @hat_base_url.nil?
18
+ fail Exception, "@domain, @hat_base_url not permit blank."
19
+ end
20
+ end
21
+
22
+ def normalize_domain
23
+ uri = URI.parse(domain)
24
+ uri = URI.parse(domain)
25
+ uri = URI.parse("http://#{domain}") unless uri.scheme
26
+
27
+ if uri.scheme != 'http' and uri.scheme != 'https'
28
+ fail ClientError, "Only HTTP and HTTPS domain are accepted."
29
+ end
30
+
31
+ @domain = uri
32
+ end
33
+ end
34
+ end # Hat
35
+ end # Api
36
+ end # Gitea
@@ -0,0 +1,132 @@
1
+ require 'base64'
2
+ require 'json'
3
+
4
+ module Gitea
5
+ module Api
6
+ module Hat
7
+ class Http
8
+ DEFAULT_CONTENT_TYPE = 'application/json'
9
+ TOKEN_HEADER = 'Authorization'
10
+ OPEN_TIMEOUT = 10
11
+ READ_TIMEOUT = 120
12
+
13
+
14
+ def initialize(config)
15
+ @config = config
16
+ end
17
+
18
+ include Gitea::Common::Logging
19
+
20
+ def get_request_url(api_url)
21
+ url = @config.domain.dup
22
+ url.query = nil
23
+ url.fragment = nil
24
+ [url.to_s, @config.hat_base_url, api_url].join('')
25
+ end
26
+
27
+ def get(api_url = '', http_options = {}, &block)
28
+ do_request('GET', api_url, http_options, &block)
29
+ end
30
+
31
+ def put(api_url = '', http_options = {}, &block)
32
+ do_request('PUT', api_url, http_options, &block)
33
+ end
34
+
35
+ def patch(api_url = '', http_options = {}, &block)
36
+ do_request('PATCH', api_url, http_options, &block)
37
+ end
38
+
39
+ def post(api_url = '', http_options = {}, &block)
40
+ do_request('POST', api_url, http_options, &block)
41
+ end
42
+
43
+ def delete(api_url = '', http_options = {}, &block)
44
+ do_request('DELETE', api_url, http_options, &block)
45
+ end
46
+
47
+ def head(api_url = '', http_options = {}, &block)
48
+ do_request('HEAD', api_url, http_options, &block)
49
+ end
50
+
51
+ def options(api_url = '', http_options = {}, &block)
52
+ do_request('OPTIONS', api_url, http_options, &block)
53
+ end
54
+
55
+ private
56
+ # Do Http request
57
+ def do_request(verb, api_url, http_options = {}, &block)
58
+
59
+ headers = http_options[:headers] || {}
60
+ headers['user-agent'] = get_user_agent
61
+ headers['date'] = Time.now.httpdate
62
+ headers['content-type'] ||= DEFAULT_CONTENT_TYPE
63
+
64
+ if @config.username and @config.password
65
+ headers[TOKEN_HEADER] = 'Basic ' + Base64::encode64(@config.username + ":" + @config.password)
66
+ end
67
+
68
+ headers[:params] = http_options[:query] || {}
69
+ headers[:params].merge!({access_token: @config.token}) if @config.token
70
+ logger.info("Gitea Hat Client Begin a Request!...")
71
+ logger.info("Send HTTP request, verb: #{verb}, http_options: #{http_options}")
72
+ logger.info("Relative Url: #{api_url}")
73
+ logger.info("Headers: #{headers}")
74
+ request = RestClient::Request.new(
75
+ :method => verb,
76
+ :url => get_request_url(api_url),
77
+ :headers => headers,
78
+ :payload => http_options[:body],
79
+ :open_timeout => @config.open_timeout || OPEN_TIMEOUT,
80
+ :read_timeout => @config.read_timeout || READ_TIMEOUT
81
+ )
82
+
83
+
84
+ response = request.execute do |resp, &blk|
85
+ if resp.code >= 300
86
+ e = Gitea::Api::ServerError.new(resp)
87
+ logger.error(e.to_s)
88
+ raise e
89
+ else
90
+ resp.return!(&blk)
91
+ end
92
+ end
93
+
94
+ # If streaming read_body is used, we need to create the
95
+ # RestClient::Response ourselves
96
+ unless response.is_a?(RestClient::Response)
97
+ if response.code.to_i >= 300
98
+ body = response.body
99
+ if RestClient::version < '2.1.0'
100
+ body = RestClient::Request.decode(response['content-encoding'], response.body)
101
+ end
102
+ response = RestClient::Response.create(body, response, request)
103
+ e = Gitea::Api::ServerError.new(response)
104
+ logger.error(e.to_s)
105
+ raise e
106
+ end
107
+ response = RestClient::Response.create(nil, response, request)
108
+ response.return!
109
+ end
110
+
111
+ begin
112
+ if response.headers.has_key?(:x_total)
113
+ return {data: JSON.parse(response), total_data: response.headers[:x_total]}
114
+ else
115
+ return JSON.parse(response)
116
+ end
117
+ rescue => e
118
+ logger.error(e.to_s)
119
+ return {}
120
+ end
121
+
122
+ logger.info("Gitea Hat Client Success End a Request!...")
123
+ end
124
+
125
+ def get_user_agent
126
+ "gitea-client/#{VERSION}"
127
+ end
128
+
129
+ end
130
+ end # Hat
131
+ end # Common
132
+ end # Gitea
@@ -0,0 +1,25 @@
1
+ module Gitea
2
+ module Api
3
+ module Hat
4
+ module Organization
5
+
6
+ def patch_orgs_by_org(org, opt = {})
7
+ @http.patch("/orgs/#{org}", opt)
8
+ end
9
+
10
+ def post_orgs(opt = {})
11
+ @http.post("/orgs", opt)
12
+ end
13
+
14
+ def put_teams_repos_by_id_org(id, org, opt = {})
15
+ @http.put("/teams/#{id}/repos/#{org}", opt)
16
+ end
17
+
18
+ def delete_teams_repos_by_id_org(id, org, opt = {})
19
+ @http.delete("/teams/#{id}/repos/#{org}", opt)
20
+ end
21
+
22
+ end # Organization
23
+ end # Hat
24
+ end # Api
25
+ end # Gitea
@@ -0,0 +1,160 @@
1
+ module Gitea
2
+ module Api
3
+ module Hat
4
+ module Repository
5
+ def get_repos_contents_by_owner_repo(owner, repo, opt = {})
6
+ @http.get("/repos/#{owner}/#{repo}/contents", opt)
7
+ end
8
+
9
+ def get_repos_contents_by_owner_repo_filepath(owner, repo, filepath, opt = {})
10
+ @http.get("/repos/#{owner}/#{repo}/contents/#{filepath}", opt)
11
+ end
12
+
13
+ def get_repos_find_by_owner_repo(owner, repo, opt = {})
14
+ @http.get("/repos/#{owner}/#{repo}/find", opt)
15
+ end
16
+
17
+ def get_repos_git_commits_by_owner_repo_sha(owner, repo, sha, opt = {})
18
+ @http.get("/repos/#{owner}/#{repo}/git/commits/#{sha}", opt)
19
+ end
20
+
21
+ def get_repos_commits_diff_by_owner_repo_sha(owner, repo, sha, opt = {})
22
+ @http.get("/repos/#{owner}/#{repo}/commits/#{sha}/diff", opt)
23
+ end
24
+
25
+ def post_repos_hooks_by_owner_repo(owner, repo, opt = {})
26
+ @http.post("/repos/#{owner}/#{repo}/hooks", opt)
27
+ end
28
+
29
+ def get_repos_hooks_hooktasks_by_owner_repo_id(owner, repo, id, opt = {})
30
+ @http.get("/repos/#{owner}/#{repo}/hooks/#{id}/hooktasks", opt)
31
+ end
32
+
33
+ def get_repos_releases_latest_by_owner_repo(owner, repo, opt = {})
34
+ @http.get("/repos/#{owner}/#{repo}/releases/latest", opt)
35
+ end
36
+
37
+ def get_repos_releases_by_owner_repo(owner, repo, opt = {})
38
+ @http.get("/repos/#{owner}/#{repo}/releases", opt)
39
+ end
40
+
41
+ def get_repos_releases_by_owner_repo_id(owner, repo, opt = {})
42
+ @http.get("/repos/#{owner}/#{repo}/releases/#{id}", opt)
43
+ end
44
+
45
+ def post_repos_releases_by_owner_repo(owner, repo, opt = {})
46
+ @http.post("/repos/#{owner}/#{repo}/releases", opt)
47
+ end
48
+
49
+ def patch_repos_releases_by_owner_repo_id(owner, repo, id, opt = {})
50
+ @http.patch("/repos/#{owner}/#{repo}/releases/#{id}", opt)
51
+ end
52
+
53
+ def get_repos_branch_name_set_by_owner_repo(owner, repo, opt = {})
54
+ @http.get("/repos/#{owner}/#{repo}/branch_name_set", opt)
55
+ end
56
+
57
+ def get_repos_branches_branches_slice_by_owner_repo(owner, repo, opt = {})
58
+ @http.get("/repos/#{owner}/#{repo}/branches/branches_slice", opt)
59
+ end
60
+
61
+ def get_repos_tag_name_set_by_owner_repo(owner, repo, opt = {})
62
+ @http.get("/repos/#{owner}/#{repo}/tag_name_set", opt)
63
+ end
64
+
65
+ def get_repos_tags_by_owner_repo(owner, repo, opt = {})
66
+ @http.get("/repos/#{owner}/#{repo}/tags", opt)
67
+ end
68
+
69
+ def get_repos_branch_tag_count_by_owner_repo(owner, repo, opt = {})
70
+ @http.get("/repos/#{owner}/#{repo}/branch_tag_count", opt)
71
+ end
72
+
73
+ def get_repos_readme_by_owner_repo(owner, repo, opt = {})
74
+ @http.get("/repos/#{owner}/#{repo}/readme", opt)
75
+ end
76
+
77
+ def get_repos_readme_by_owner_repo_filepath(owner, repo, filepath, opt = {})
78
+ @http.get("/repos/#{owner}/#{repo}/readme/#{filepath}", opt)
79
+ end
80
+
81
+ def get_repos_commits_slice_by_owner_repo(owner, repo, filepath, opt = {})
82
+ @http.get("/repos/#{owner}/#{repo}/commits_slice", opt)
83
+ end
84
+
85
+ def get_repos_contributors_by_owner_repo(owner, repo, opt = {})
86
+ @http.get("/repos/#{owner}/#{repo}/contributors", opt)
87
+ end
88
+
89
+ def get_repos_code_stats_by_owner_repo(owner, repo, opt = {})
90
+ @http.get("/repos/#{owner}/#{repo}/code_stats", opt)
91
+ end
92
+
93
+ def get_repos_count_by_owner_repo(owner, repo, opt = {})
94
+ @http.get("/repos/#{owner}/#{repo}/count", opt)
95
+ end
96
+
97
+ def get_repos_file_commits_by_owner_repo_filepath(owner, repo, filepath, opt = {})
98
+ @http.get("/repos/#{owner}/#{repo}/file_commits/#{filepath}", opt)
99
+ end
100
+
101
+ def get_repos_blame_by_owner_repo(owner, repo, opt = {})
102
+ @http.get("/repos/#{owner}/#{repo}/blame", opt)
103
+ end
104
+
105
+ def get_repos_compare_by_owner_repo_baseref_headref(owner, repo, baseRef, headRef, opt = {})
106
+ @http.get("/repos/#{owner}/#{repo}/compare/#{baseRef}...#{headRef}", opt)
107
+ end
108
+
109
+ def post_repos_transfer_by_owner_repo(owner, repo, opt = {})
110
+ @http.post("/repos/#{owner}/#{repo}/transfer", opt)
111
+ end
112
+
113
+ def get_repos_pulls_by_owner_repo_index(owner, repo, index, opt = {})
114
+ @http.get("/repos/#{owner}/#{repo}/pulls/#{index}", opt)
115
+ end
116
+
117
+ def get_repos_pulls_commits_by_owner_repo_index(owner, repo, index, opt = {})
118
+ @http.get("/repos/#{owner}/#{repo}/pulls/#{index}/commits", opt)
119
+ end
120
+
121
+ def get_repos_pulls_files_by_owner_repo_index(owner, repo, index, opt = {})
122
+ @http.get("/repos/#{owner}/#{repo}/pulls/#{index}/files", opt)
123
+ end
124
+
125
+ def get_repos_wikies_by_owner_repo(owner, repo, opt = {})
126
+ @http.get("/repos/#{owner}/#{repo}/wikies", opt)
127
+ end
128
+
129
+ def post_repos_wikies_by_owner_repo(owner, repo, opt = {})
130
+ @http.post("/repos/#{owner}/#{repo}/wikies", opt)
131
+ end
132
+
133
+ def patch_repos_wikies_by_owner_repo_pagename(owner, repo, pageName, opt = {})
134
+ @http.patch("/repos/#{owner}/#{repo}/wikies/#{pageName}", opt)
135
+ end
136
+
137
+ def get_repos_wikies_by_owner_repo_pagename(owner, repo, pageName, opt = {})
138
+ @http.get("/repos/#{owner}/#{repo}/wikies/#{pageName}", opt)
139
+ end
140
+
141
+ def delete_repos_wikies_by_owner_repo_pagename(owner, repo, pageName, opt = {})
142
+ @http.delete("/repos/#{owner}/#{repo}/wikies/#{pageName}", opt)
143
+ end
144
+
145
+ def post_repos_contents_batch_by_owner_repo(owner, repo, opt = {})
146
+ @http.post("/repos/#{owner}/#{repo}/contents/batch", opt)
147
+ end
148
+
149
+ def get_repos_pulls_versions_by_owner_repo_index(owner, repo, index, opt = {})
150
+ @http.get("/repos/#{owner}/#{repo}/pulls/#{index}/versions", opt)
151
+ end
152
+
153
+ def get_repos_pulls_versions_diff_by_owner_repo_index_id(owner, repo, index, versionID, opt = {})
154
+ @http.get("/repos/#{owner}/#{repo}/pulls/#{index}/versions/#{versionID}/diff", opt)
155
+ end
156
+
157
+ end # Repository
158
+ end # Hat
159
+ end # Api
160
+ end # Gitea
@@ -0,0 +1,13 @@
1
+ module Gitea
2
+ module Api
3
+ module Hat
4
+ module Users
5
+
6
+ def get_users_heatmap_by_username(username, opt = {})
7
+ @http.get("/users/#{username}/heatmap", opt)
8
+ end
9
+
10
+ end # Users
11
+ end # Hat
12
+ end # Api
13
+ end # Gitea
data/lib/gitea/api.rb CHANGED
@@ -11,3 +11,10 @@ require_relative 'api/client'
11
11
  require_relative 'api/config'
12
12
  require_relative 'api/exception'
13
13
  require_relative 'api/http'
14
+ require_relative 'api/hat/repository'
15
+ require_relative 'api/hat/organization'
16
+ require_relative 'api/hat/users'
17
+ require_relative 'api/hat/admin'
18
+ require_relative 'api/hat/client'
19
+ require_relative 'api/hat/config'
20
+ require_relative 'api/hat/http'
data/lib/gitea/version.rb CHANGED
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Gitea
4
- VERSION = "1.2.0"
4
+ VERSION = "1.2.2"
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: gitea-client
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.2.0
4
+ version: 1.2.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - viletyy
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2023-01-31 00:00:00.000000000 Z
11
+ date: 2023-02-03 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rest-client
@@ -49,6 +49,13 @@ files:
49
49
  - lib/gitea/api/client.rb
50
50
  - lib/gitea/api/config.rb
51
51
  - lib/gitea/api/exception.rb
52
+ - lib/gitea/api/hat/admin.rb
53
+ - lib/gitea/api/hat/client.rb
54
+ - lib/gitea/api/hat/config.rb
55
+ - lib/gitea/api/hat/http.rb
56
+ - lib/gitea/api/hat/organization.rb
57
+ - lib/gitea/api/hat/repository.rb
58
+ - lib/gitea/api/hat/users.rb
52
59
  - lib/gitea/api/http.rb
53
60
  - lib/gitea/api/issue.rb
54
61
  - lib/gitea/api/miscellaneous.rb