discourse/plugins/discourse-patreon/app/controllers/patreon/patreon_admin_controller.rb
Jarek Radosz 71834c898f
DEV: Update rubocop-discourse to 3.13 and autofix issues (#35073)
Co-authored-by: Loïc Guitaut <loic@discourse.org>
2025-10-06 16:11:01 +02:00

100 lines
2.5 KiB
Ruby

# frozen_string_literal: true
class Patreon::PatreonAdminController < Admin::AdminController
requires_plugin Patreon::PLUGIN_NAME
before_action :patreon_enabled?
before_action :patreon_tokens_present?
def patreon_enabled?
raise Discourse::NotFound unless SiteSetting.patreon_enabled
end
def list
filters = PluginStore.get(Patreon::PLUGIN_NAME, "filters") || {}
rewards = Patreon::Reward.all
last_sync = Patreon.get("last_sync") || {}
groups = ::Group.all.pluck(:id)
valid_filters = filters.select { |k| groups.include?(k.to_i) }
render json: { filters: valid_filters, rewards: rewards, last_sync_at: last_sync["at"] }
end
def rewards
rewards = Patreon::Reward.all
render json: rewards
end
def is_number?(string)
begin
true if Float(string)
rescue StandardError
false
end
end
def edit
if params[:rewards_ids].nil? || !is_number?(params[:group_id])
return render json: { message: "Error" }, status: :internal_server_error
end
filters = PluginStore.get(Patreon::PLUGIN_NAME, "filters") || {}
filters[params[:group_id]] = params[:rewards_ids]
PluginStore.set(Patreon::PLUGIN_NAME, "filters", filters)
render json: success_json
end
def delete
unless is_number?(params[:group_id])
return render json: { message: "Error" }, status: :internal_server_error
end
filters = PluginStore.get(Patreon::PLUGIN_NAME, "filters")
filters.delete(params[:group_id])
PluginStore.set(Patreon::PLUGIN_NAME, "filters", filters)
render json: success_json
end
def sync_groups
begin
Patreon::Patron.sync_groups
render json: success_json
rescue => e
render json: { message: e.message }, status: :internal_server_error
end
end
def update_data
Jobs.enqueue(:patreon_sync_patrons_to_groups)
render json: success_json
end
def email
user = fetch_user_from_params(include_inactive: true)
unless user == current_user
guardian.ensure_can_check_emails!(user)
StaffActionLogger.new(current_user).log_check_email(user, context: params[:context])
end
render json: { email: Patreon::Patron.attr("email", user) }
end
def patreon_tokens_present?
if SiteSetting.patreon_creator_access_token.blank?
raise Discourse::SiteSettingMissing.new("patreon_creator_access_token")
end
if SiteSetting.patreon_creator_refresh_token.blank?
raise Discourse::SiteSettingMissing.new("patreon_creator_refresh_token")
end
end
end