parent
6f5f8ce247
commit
07e3dcc58c
@ -0,0 +1,9 @@
|
|||||||
|
class Gitea::RepositoryForm
|
||||||
|
include ActiveModel::Model
|
||||||
|
attr_accessor :name, :description, :auto_init, :gitignores,
|
||||||
|
:issue_labels, :license, :private, :readme
|
||||||
|
|
||||||
|
validates :name, presence: true
|
||||||
|
validates :name, uniqueness: true
|
||||||
|
|
||||||
|
end
|
@ -1,31 +1,37 @@
|
|||||||
class Gitea::RegisterInteractor
|
module Gitea
|
||||||
def self.call(params)
|
class RegisterInteractor
|
||||||
interactor = new(params)
|
def self.call(params)
|
||||||
interactor.run
|
interactor = new(params)
|
||||||
interactor
|
interactor.run
|
||||||
end
|
interactor
|
||||||
|
end
|
||||||
|
|
||||||
attr_reader :error
|
attr_reader :error
|
||||||
|
|
||||||
def initialize(params)
|
def initialize(params)
|
||||||
@params = params
|
@params = params
|
||||||
end
|
end
|
||||||
|
|
||||||
def success?
|
def success?
|
||||||
@error.nil?
|
@error.nil?
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def run
|
||||||
|
Gitea::UserForm.new(params).validate!
|
||||||
|
Gitea::User::RegisterService.new(params).call
|
||||||
|
# Gitea::Client.new.register("nifewf", "123@qq.com", "djs_D_00001")
|
||||||
|
rescue Exception => exception
|
||||||
|
Rails.logger.info "Exception ===========> #{exception.message}"
|
||||||
|
fail!(exception.message)
|
||||||
|
end
|
||||||
|
|
||||||
def run
|
|
||||||
Gitea::Users::RegisterService.new(params).call
|
|
||||||
rescue Exception => exception
|
|
||||||
fail!(exception.message)
|
|
||||||
end
|
|
||||||
|
|
||||||
private
|
private
|
||||||
|
|
||||||
attr_reader :params
|
attr_reader :params
|
||||||
|
|
||||||
def fail!(error)
|
def fail!(error)
|
||||||
@error = error
|
@error = error
|
||||||
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
@ -0,0 +1,35 @@
|
|||||||
|
class Gitea::RepositoryInteractor
|
||||||
|
attr_reader :token, :repository
|
||||||
|
|
||||||
|
# params: token and repository
|
||||||
|
def self.call(token, repository)
|
||||||
|
interactor = new(token, repository)
|
||||||
|
interactor.run
|
||||||
|
interactor
|
||||||
|
end
|
||||||
|
|
||||||
|
def initialize(token, repository)
|
||||||
|
@token = token
|
||||||
|
@repository = repository
|
||||||
|
end
|
||||||
|
|
||||||
|
def success?
|
||||||
|
@error.nil?
|
||||||
|
end
|
||||||
|
|
||||||
|
def run
|
||||||
|
Gitea::RepositoryForm.new({name: repository&.name}).validate!
|
||||||
|
Gitea::Repository::CreateService.new(token, repository).call
|
||||||
|
rescue Exception => exception
|
||||||
|
puts exception.message
|
||||||
|
fail!(exception.message)
|
||||||
|
end
|
||||||
|
|
||||||
|
private
|
||||||
|
|
||||||
|
attr_reader :error
|
||||||
|
|
||||||
|
def fail!(error)
|
||||||
|
@error = error
|
||||||
|
end
|
||||||
|
end
|
@ -0,0 +1,99 @@
|
|||||||
|
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
|
||||||
|
|
||||||
|
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 render_status(response)
|
||||||
|
mark = "[gitea] "
|
||||||
|
|
||||||
|
case response.status
|
||||||
|
when 201
|
||||||
|
JSON.parse(response&.body)
|
||||||
|
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]
|
||||||
|
else
|
||||||
|
result = JSON.parse(response&.body)
|
||||||
|
message = result['message']
|
||||||
|
raise Error, mark + message
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
def authen_params(token)
|
||||||
|
(token.is_a? String) ? {token: token} : Hash(token)
|
||||||
|
end
|
||||||
|
end
|
@ -0,0 +1,18 @@
|
|||||||
|
class Gitea::Repository::CreateService < Gitea::ClientService
|
||||||
|
attr_reader :token, :params
|
||||||
|
|
||||||
|
def initialize(token, params)
|
||||||
|
@token = token
|
||||||
|
@params = params
|
||||||
|
end
|
||||||
|
|
||||||
|
def call
|
||||||
|
request_params = {}
|
||||||
|
url = "/user/repos".freeze
|
||||||
|
request_params = request_params.merge(token: token, data: params)
|
||||||
|
post(url, request_params)
|
||||||
|
end
|
||||||
|
|
||||||
|
private
|
||||||
|
|
||||||
|
end
|
@ -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
|
@ -0,0 +1,28 @@
|
|||||||
|
class Gitea::User::RegisterService < Gitea::ClientService
|
||||||
|
def initialize(options = {})
|
||||||
|
options.each_pair do |key, value|
|
||||||
|
instance_variable_set("@#{key}", value)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
def call
|
||||||
|
url = "/admin/users"
|
||||||
|
params = {}
|
||||||
|
params = params.merge(data: user_params)
|
||||||
|
post(url, params)
|
||||||
|
end
|
||||||
|
|
||||||
|
private
|
||||||
|
|
||||||
|
attr_reader :email, :username, :password, :url
|
||||||
|
|
||||||
|
def user_params
|
||||||
|
{
|
||||||
|
email: email,
|
||||||
|
username: username,
|
||||||
|
password: password,
|
||||||
|
must_change_password: false #允许不更改秘密就可以登录
|
||||||
|
}
|
||||||
|
end
|
||||||
|
|
||||||
|
end
|
@ -1,27 +0,0 @@
|
|||||||
# 根据对应的用户名和秘密生成token
|
|
||||||
class Gitea::Users::GenerateTokenService < Gitea::APIService
|
|
||||||
attr_reader :username, :password
|
|
||||||
|
|
||||||
def initialize(username, password)
|
|
||||||
@username = username
|
|
||||||
@password = password
|
|
||||||
end
|
|
||||||
|
|
||||||
def call
|
|
||||||
response = Gitea.client(user_params).post do |req|
|
|
||||||
req.url "#{Gitea::APIService.base_url}/users/#{username}/tokens".freeze
|
|
||||||
req.headers['Content-Type'] = 'application/json'
|
|
||||||
req.body = {name: username}.to_json
|
|
||||||
end
|
|
||||||
puts "-----------generate token response boby: #{response.body}"
|
|
||||||
Gitea::APIService.render_status(response)
|
|
||||||
end
|
|
||||||
|
|
||||||
private
|
|
||||||
def user_params
|
|
||||||
{
|
|
||||||
username: username,
|
|
||||||
password: password
|
|
||||||
}
|
|
||||||
end
|
|
||||||
end
|
|
@ -1,31 +0,0 @@
|
|||||||
class Gitea::Users::RegisterService < Gitea::APIService
|
|
||||||
REQUEST_URL = [Gitea::APIService.base_url, "/admin/users"].join('').freeze
|
|
||||||
|
|
||||||
def initialize(options = {})
|
|
||||||
options.each_pair do |key, value|
|
|
||||||
instance_variable_set("@#{key}", value)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
def call
|
|
||||||
response = Gitea.client.post do |req|
|
|
||||||
req.url "#{REQUEST_URL}"
|
|
||||||
req.headers['Content-Type'] = 'application/json'
|
|
||||||
req.body = user_params.to_json
|
|
||||||
end
|
|
||||||
Gitea::APIService.render_status(response)
|
|
||||||
end
|
|
||||||
|
|
||||||
private
|
|
||||||
|
|
||||||
attr_reader :email, :username, :password
|
|
||||||
|
|
||||||
def user_params
|
|
||||||
{
|
|
||||||
email: email,
|
|
||||||
username: username,
|
|
||||||
password: password,
|
|
||||||
must_change_password: false #允许不更改秘密就可以登录
|
|
||||||
}
|
|
||||||
end
|
|
||||||
end
|
|
@ -1,34 +0,0 @@
|
|||||||
module Gitea
|
|
||||||
def self.client(options={})
|
|
||||||
puts "------ init gitea -----"
|
|
||||||
username = options[:username] || Gitea.gitea_config[:access_key_id]
|
|
||||||
password = options[:password] || Gitea.gitea_config[:access_key_secret]
|
|
||||||
url = gitea_config[:domain]
|
|
||||||
|
|
||||||
puts "gitea username: #{username} -- password: #{password}"
|
|
||||||
@client ||= begin
|
|
||||||
Faraday.new(url: url) do |req|
|
|
||||||
req.request :url_encoded
|
|
||||||
req.response :logger # 显示日志
|
|
||||||
req.adapter Faraday.default_adapter
|
|
||||||
req.basic_auth(username, password)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
@client
|
|
||||||
end
|
|
||||||
|
|
||||||
def self.gitea_config
|
|
||||||
begin
|
|
||||||
config = Rails.application.config_for(:configuration).symbolize_keys!
|
|
||||||
gitea_config = config[:gitea].symbolize_keys!
|
|
||||||
raise 'gitea config missing' if gitea_config.blank?
|
|
||||||
rescue => ex
|
|
||||||
raise ex if Rails.env.production?
|
|
||||||
|
|
||||||
puts %Q{\033[33m [warning] gitea config or configuration.yml missing,
|
|
||||||
please add it or execute 'cp config/configuration.yml.example config/configuration.yml' \033[0m}
|
|
||||||
gitea_config = {}
|
|
||||||
end
|
|
||||||
gitea_config
|
|
||||||
end
|
|
||||||
end
|
|
Loading…
Reference in new issue