mirror of
https://github.com/astuto/astuto.git
synced 2025-12-16 03:37:56 +01:00
97 lines
2.1 KiB
Ruby
97 lines
2.1 KiB
Ruby
class WebhooksController < ApplicationController
|
|
def index
|
|
authorize Webhook
|
|
|
|
@webhooks = Webhook.order(trigger: :asc, created_at: :desc)
|
|
|
|
render json: @webhooks
|
|
end
|
|
|
|
def create
|
|
@webhook = Webhook.new
|
|
@webhook.assign_attributes(webhook_params)
|
|
authorize @webhook
|
|
|
|
if @webhook.save
|
|
render json: @webhook, status: :created
|
|
else
|
|
render json: {
|
|
error: @webhook.errors.full_messages
|
|
}, status: :unprocessable_entity
|
|
end
|
|
end
|
|
|
|
def update
|
|
@webhook = Webhook.find(params[:id])
|
|
authorize @webhook
|
|
|
|
if @webhook.update(webhook_params)
|
|
render json: @webhook
|
|
else
|
|
render json: {
|
|
error: @webhook.errors.full_messages
|
|
}, status: :unprocessable_entity
|
|
end
|
|
end
|
|
|
|
def destroy
|
|
@webhook = Webhook.find(params[:id])
|
|
authorize @webhook
|
|
|
|
if @webhook.destroy
|
|
render json: {
|
|
id: params[:id]
|
|
}, status: :accepted
|
|
else
|
|
render json: {
|
|
error: @webhook.errors.full_messages
|
|
}, status: :unprocessable_entity
|
|
end
|
|
end
|
|
|
|
def preview
|
|
context = CreateLiquidTemplateContextWorkflow.new(
|
|
webhook_trigger: params[:webhook][:trigger],
|
|
is_test: true,
|
|
).run
|
|
|
|
url_template = Liquid::Template.parse(params[:webhook][:url])
|
|
url_preview = url_template.render(context)
|
|
|
|
http_body_template = Liquid::Template.parse(params[:webhook][:http_body])
|
|
http_body_preview = http_body_template.render(context)
|
|
|
|
render json: {
|
|
url_preview: url_preview,
|
|
http_body_preview: http_body_preview,
|
|
}, status: :ok
|
|
rescue => e
|
|
render json: {
|
|
error: e.message
|
|
}, status: :unprocessable_entity
|
|
end
|
|
|
|
def test
|
|
response = RunWebhook.perform_now(
|
|
webhook_id: params[:id],
|
|
current_tenant_id: Current.tenant.id,
|
|
is_test: true
|
|
)
|
|
|
|
render json: {
|
|
response: response,
|
|
}, status: :ok
|
|
rescue => e
|
|
render json: {
|
|
error: e.message
|
|
}, status: :unprocessable_entity
|
|
end
|
|
|
|
private
|
|
|
|
def webhook_params
|
|
params
|
|
.require(:webhook)
|
|
.permit(policy(@webhook).permitted_attributes)
|
|
end
|
|
end |