|
- 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
|