From 7d1688c3dd30ef8f0e16a3fb4928f5d9ce243e6c Mon Sep 17 00:00:00 2001 From: xxq250 Date: Fri, 28 Feb 2025 21:58:16 +0800 Subject: [PATCH] raw api limit --- app/controllers/application_controller.rb | 16 +++++++++++++++- app/controllers/repositories_controller.rb | 1 + 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/app/controllers/application_controller.rb b/app/controllers/application_controller.rb index ea050ebe5..e42c44cd3 100644 --- a/app/controllers/application_controller.rb +++ b/app/controllers/application_controller.rb @@ -1184,7 +1184,21 @@ class ApplicationController < ActionController::Base end tip_exception("请求太快,请稍后再试。") if record_count > 100 - Rails.cache.write("request/#{controller_name}/#{Time.now.strftime('%Y%m%d%H%M')}/#{request.remote_ip}", record_count, expires_in: 1.minute) + Rails.cache.write("request/#{controller_name}/#{Time.now.strftime('%Y%m%d%H%M')}/#{request.remote_ip}", record_count, expires_in: 10.minute) + end + + def check_batch_requests + check_key = "request.remote_ip:#{request.remote_ip}" + result = Rails.cache.read(check_key) + if result.present? + if result.to_i > 100 + tip_exception(401, '暂时无法请求,请稍后再试') + else + Rails.cache.write(check_key, result.to_i + 1) + end + else + Rails.cache.write(check_key, 1, expires_in: 1.hour) + end end end diff --git a/app/controllers/repositories_controller.rb b/app/controllers/repositories_controller.rb index 0115dda99..173d15752 100644 --- a/app/controllers/repositories_controller.rb +++ b/app/controllers/repositories_controller.rb @@ -14,6 +14,7 @@ class RepositoriesController < ApplicationController before_action :get_latest_commit, only: %i[entries sub_entries top_counts] before_action :get_statistics, only: %i[top_counts] before_action :require_referer, only: [:raw] + before_action :request_limit, only: [:raw] def files result = @project.educoder? ? nil : Gitea::Repository::Files::GetService.call(@owner, @project.identifier, @ref, params[:search], @owner.gitea_token)