55 lines
1.7 KiB
Ruby
Executable File
55 lines
1.7 KiB
Ruby
Executable File
class Internal::AccountAnalysis::AccountUpdaterService
|
|
def initialize(account)
|
|
@account = account
|
|
end
|
|
|
|
def update_with_analysis(analysis, error_message = nil)
|
|
if error_message
|
|
save_error(error_message)
|
|
notify_on_discord
|
|
return
|
|
end
|
|
|
|
save_analysis_results(analysis)
|
|
flag_account_if_needed(analysis)
|
|
end
|
|
|
|
private
|
|
|
|
def save_error(error_message)
|
|
@account.internal_attributes['security_flagged'] = true
|
|
@account.internal_attributes['security_flag_reason'] = "Error: #{error_message}"
|
|
@account.save
|
|
end
|
|
|
|
def save_analysis_results(analysis)
|
|
@account.internal_attributes['last_threat_scan_at'] = Time.current
|
|
@account.internal_attributes['last_threat_scan_level'] = analysis['threat_level']
|
|
@account.internal_attributes['last_threat_scan_summary'] = analysis['threat_summary']
|
|
@account.internal_attributes['last_threat_scan_recommendation'] = analysis['recommendation']
|
|
@account.save!
|
|
end
|
|
|
|
def flag_account_if_needed(analysis)
|
|
return if analysis['threat_level'] == 'none'
|
|
|
|
if %w[high medium].include?(analysis['threat_level']) ||
|
|
analysis['illegal_activities_detected'] == true ||
|
|
analysis['recommendation'] == 'block'
|
|
|
|
@account.internal_attributes['security_flagged'] = true
|
|
@account.internal_attributes['security_flag_reason'] = "Threat detected: #{analysis['threat_summary']}"
|
|
@account.save!
|
|
|
|
Rails.logger.info("Flagging account #{@account.id} due to threat level: #{analysis['threat_level']}")
|
|
end
|
|
|
|
notify_on_discord
|
|
end
|
|
|
|
def notify_on_discord
|
|
Rails.logger.info("Account #{@account.id} has been flagged for security review")
|
|
Internal::AccountAnalysis::DiscordNotifierService.new.notify_flagged_account(@account)
|
|
end
|
|
end
|