133 Zeilen
3,3 KiB
Ruby
133 Zeilen
3,3 KiB
Ruby
# frozen_string_literal: true
|
|
class CustomWizard::AdminApiController < CustomWizard::AdminController
|
|
skip_before_action :check_xhr, only: [:redirect]
|
|
|
|
def list
|
|
serializer = ActiveModel::ArraySerializer.new(CustomWizard::Api.list,
|
|
each_serializer: CustomWizard::BasicApiSerializer
|
|
)
|
|
render json: MultiJson.dump(serializer)
|
|
end
|
|
|
|
def find
|
|
render_serialized(CustomWizard::Api.get(api_params[:name]), CustomWizard::ApiSerializer, root: false)
|
|
end
|
|
|
|
def save
|
|
current = CustomWizard::Api.get(api_params[:name])
|
|
|
|
if api_params[:new] && current
|
|
raise Discourse::InvalidParameters, "An API with that name already exists: '#{current.title || current.name}'"
|
|
end
|
|
|
|
PluginStoreRow.transaction do
|
|
CustomWizard::Api.set(api_params[:name], title: api_params[:title])
|
|
|
|
if auth_data.present?
|
|
auth_data['auth_params'] = auth_data['auth_params'] || []
|
|
CustomWizard::Api::Authorization.set(api_params[:name], auth_data)
|
|
end
|
|
|
|
if api_params[:endpoints].is_a? String
|
|
begin
|
|
endpoints = JSON.parse(api_params[:endpoints])
|
|
endpoints.each do |endpoint|
|
|
CustomWizard::Api::Endpoint.set(api_params[:name], endpoint)
|
|
end
|
|
rescue => e
|
|
puts e
|
|
end
|
|
end
|
|
end
|
|
|
|
render json: success_json.merge(
|
|
api: CustomWizard::ApiSerializer.new(
|
|
CustomWizard::Api.get(api_params[:name]),
|
|
root: false
|
|
)
|
|
)
|
|
end
|
|
|
|
def remove
|
|
PluginStoreRow.transaction do
|
|
CustomWizard::Api.remove(api_params[:name])
|
|
CustomWizard::Api::Authorization.remove(api_params[:name])
|
|
CustomWizard::Api::Endpoint.remove(api_params[:name])
|
|
CustomWizard::Api::LogEntry.clear(api_params[:name])
|
|
end
|
|
|
|
render json: success_json
|
|
end
|
|
|
|
def authorize
|
|
result = CustomWizard::Api::Authorization.get_token(api_params[:name])
|
|
|
|
if result.instance_variable_defined?(:@error)
|
|
render json: failed_json.merge(message: result['error_description'] || result['error'])
|
|
else
|
|
render json: success_json.merge(
|
|
api: CustomWizard::ApiSerializer.new(
|
|
CustomWizard::Api.get(api_params[:name]),
|
|
root: false
|
|
)
|
|
)
|
|
end
|
|
end
|
|
|
|
def clearlogs
|
|
CustomWizard::Api::LogEntry.clear(api_params[:name])
|
|
render json: success_json
|
|
end
|
|
|
|
def redirect
|
|
params.require(:name)
|
|
params.require(:code)
|
|
|
|
CustomWizard::Api::Authorization.set(params[:name], code: params[:code])
|
|
CustomWizard::Api::Authorization.get_token(params[:name])
|
|
|
|
redirect_to path('/admin/wizards/apis/' + params[:name])
|
|
end
|
|
|
|
private
|
|
|
|
def api_params
|
|
params.require(:name)
|
|
|
|
data = params.permit(
|
|
:name,
|
|
:title,
|
|
:auth_type,
|
|
:auth_url,
|
|
:token_url,
|
|
:client_id,
|
|
:client_secret,
|
|
:username,
|
|
:password,
|
|
:auth_params,
|
|
:endpoints,
|
|
:new
|
|
).to_h
|
|
|
|
data[:name] = data[:name].underscore
|
|
|
|
@api_params ||= data
|
|
end
|
|
|
|
def auth_data
|
|
auth_data = api_params.slice(
|
|
:auth_type,
|
|
:auth_url,
|
|
:token_url,
|
|
:client_id,
|
|
:client_secret,
|
|
:username,
|
|
:password,
|
|
:auth_params
|
|
)
|
|
|
|
auth_data[:auth_params] = JSON.parse(auth_data[:auth_params]) if auth_data[:auth_params].present?
|
|
|
|
@auth_data ||= auth_data
|
|
end
|
|
end
|