require'foreman_openscap/helper'moduleApimoduleV2moduleComplianceclassArfReportsController<V2::BaseControllerincludeApi::Version2includeForeman::Controller::SmartProxyAuthincludeForemanOpenscap::ArfReportsControllerCommonExtensionsadd_smart_proxy_filters:create,:features=>'Openscap'before_action:find_resource,:only=>%w[show destroy download download_html]before_action:find_resources_before_create,:only=>%w[create]skip_after_action:log_response_body,:only=>%w[download download_html]defresource_name(resource='::ForemanOpenscap::ArfReport')superresourceenddefget_resource(message='no resource loaded')instance_variable_get(:"@arf_report")||raise(message)endapi:GET,'/compliance/arf_reports',N_('List ARF reports')param_group:search_and_pagination,::Api::V2::BaseControlleradd_scoped_search_description_for(::ForemanOpenscap::ArfReport)defindex@arf_reports=resource_scope_for_index(:permission=>:view_arf_reports).includes(:openscap_proxy,:policy,:host)endapi:GET,'/compliance/arf_reports/:id',N_('Show an ARF report')param:id,:identifier,:required=>truedefshowendapi:DELETE,'/compliance/arf_reports/:id',N_('Delete an ARF Report')param:id,:identifier,:required=>truedefdestroyprocess_response@arf_report.destroyendapi:POST,"/compliance/arf/:cname/:policy_id/:date",N_("Upload an ARF report")param:cname,:identifier,:required=>trueparam:policy_id,:identifier,:required=>trueparam:date,:identifier,:required=>truedefcreatearf_report=ForemanOpenscap::ArfReport.create_arf(@asset,@smart_proxy,params.to_unsafe_h)@asset.host.refresh_statuses([HostStatus.find_status_by_humanized_name("compliance")])respond_for_reportarf_reportendapi:GET,"/compliance/arf_reports/:id/download/",N_("Download bzipped ARF report")param:id,:identifier,:required=>truedefdownloadresponse=@arf_report.to_bzipsend_dataresponse,:filename=>"#{format_filename}.xml.bz2"rescue=>ehandle_download_erroreendapi:GET,"/compliance/arf_reports/:id/download_html/",N_("Download ARF report in HTML")param:id,:identifier,:required=>truedefdownload_htmlresponse=@arf_report.to_htmlsend_dataresponse,:filename=>"#{format_filename}.html"rescue=>ehandle_download_erroreendprivatedefrespond_for_report(arf_report)ifarf_report.new_record?upload_failarf_report.errors.full_messages.to_sentenceelserender:json=>{:result=>:ok,:id=>arf_report.id.to_s}endenddeffind_resourcenot_found&&returnifparams[:id].blank?instance_variable_set("@arf_report",resource_scope.find(params[:id]))enddeffind_resources_before_createpolicy_id=params[:policy_id].to_iunlessForemanOpenscap::Policy.where(:id=>policy_id).any?upload_fail(_("Policy with id %s not found.")%policy_id)returnend@asset=ForemanOpenscap::Helper::get_asset(params[:cname],policy_id)unless@assetupload_fail(_('Could not find host identified by: %s')%params[:cname])returnendif!params[:openscap_proxy_url]&&!params[:openscap_proxy_name]&&!@asset.host.openscap_proxymsg=_('Failed to upload Arf Report, OpenSCAP proxy name or url not found in params when uploading for %s and host is missing openscap_proxy')%@asset.host.nameupload_fail(msg)returnelsif!params[:openscap_proxy_url]&&!params[:openscap_proxy_name]&&@asset.host.openscap_proxylogger.debug'No proxy params found when uploading arf report, falling back to asset.host.openscap_proxy'@smart_proxy=@asset.host.openscap_proxyelse@smart_proxy=SmartProxy.unscoped.find_by:name=>params[:openscap_proxy_name]@smart_proxy||=SmartProxy.unscoped.find_by:url=>params[:openscap_proxy_url]endunless@smart_proxymsg=_('No proxy found for %{name} or %{url}')%{:name=>params[:openscap_proxy_name],:url=>params[:openscap_proxy_url]}upload_fail(msg)returnendenddefhandle_download_error(error)render_error:custom_error,:status=>:unprocessable_entity,:locals=>{:message=>_("Downloading the report failed: #{error.message}")}enddefupload_fail(msg)logger.errormsgrender:json=>{:result=>:fail,:errors=>msg},:status=>:unprocessable_entityenddefaction_permissioncaseparams[:action]when'download','download_html':viewelsesuperendendendendendend