From fe7dfcea52878cec003916437cb9b1aee0292622 Mon Sep 17 00:00:00 2001 From: yystopf Date: Tue, 31 Aug 2021 10:18:00 +0800 Subject: [PATCH] add: reversed keyword and api forbidden --- app/controllers/accounts_controller.rb | 1 + .../organizations/organizations_controller.rb | 1 + app/controllers/projects_controller.rb | 2 ++ app/models/reversed_keyword.rb | 16 ++++++++++++++++ .../20210831014412_create_reversed_keywords.rb | 11 +++++++++++ spec/models/reversed_keyword_spec.rb | 5 +++++ 6 files changed, 36 insertions(+) create mode 100644 app/models/reversed_keyword.rb create mode 100644 db/migrate/20210831014412_create_reversed_keywords.rb create mode 100644 spec/models/reversed_keyword_spec.rb diff --git a/app/controllers/accounts_controller.rb b/app/controllers/accounts_controller.rb index 0745726b9..79ba7d257 100644 --- a/app/controllers/accounts_controller.rb +++ b/app/controllers/accounts_controller.rb @@ -9,6 +9,7 @@ class AccountsController < ApplicationController # 其他平台同步注册的用户 def remote_register username = params[:username]&.gsub(/\s+/, "") + return render_forbidden('该用户名为系统保留关键字.') if ReversedKeyword.is_reversed(username).present? email = params[:email]&.gsub(/\s+/, "") password = params[:password] platform = (params[:platform] || 'forge')&.gsub(/\s+/, "") diff --git a/app/controllers/organizations/organizations_controller.rb b/app/controllers/organizations/organizations_controller.rb index 104db90ed..80b685ce1 100644 --- a/app/controllers/organizations/organizations_controller.rb +++ b/app/controllers/organizations/organizations_controller.rb @@ -25,6 +25,7 @@ class Organizations::OrganizationsController < Organizations::BaseController def create ActiveRecord::Base.transaction do + return render_forbidden('该组织标识为系统保留关键字.') if ReversedKeyword.is_reversed(organization_params[:name]).present? Organizations::CreateForm.new(organization_params).validate! @organization = Organizations::CreateService.call(current_user, organization_params) Util.write_file(@image, avatar_path(@organization)) if params[:image].present? diff --git a/app/controllers/projects_controller.rb b/app/controllers/projects_controller.rb index 818abf548..d6df73bb4 100644 --- a/app/controllers/projects_controller.rb +++ b/app/controllers/projects_controller.rb @@ -45,6 +45,7 @@ class ProjectsController < ApplicationController def create ActiveRecord::Base.transaction do + return render_forbidden('该项目标识为系统保留关键字.') if ReversedKeyword.is_reversed(project_params[:repository_name]).present? Projects::CreateForm.new(project_params).validate! @project = Projects::CreateService.new(current_user, project_params).call @@ -55,6 +56,7 @@ class ProjectsController < ApplicationController end def migrate + return render_forbidden('该项目标识为系统保留关键字.') if ReversedKeyword.is_reversed(mirror_params[:repository_name]).present? Projects::MigrateForm.new(mirror_params).validate! @project = diff --git a/app/models/reversed_keyword.rb b/app/models/reversed_keyword.rb new file mode 100644 index 000000000..8076a3413 --- /dev/null +++ b/app/models/reversed_keyword.rb @@ -0,0 +1,16 @@ +# == Schema Information +# +# Table name: reversed_keywords +# +# id :integer not null, primary key +# identifier :string(255) +# description :text(65535) +# closed :boolean default("0") +# created_at :datetime not null +# updated_at :datetime not null +# + +class ReversedKeyword < ApplicationRecord + + scope :is_reversed, -> (identifier){where(identifier: identifier, closed: false) if identifier.present?} +end diff --git a/db/migrate/20210831014412_create_reversed_keywords.rb b/db/migrate/20210831014412_create_reversed_keywords.rb new file mode 100644 index 000000000..cbd77e353 --- /dev/null +++ b/db/migrate/20210831014412_create_reversed_keywords.rb @@ -0,0 +1,11 @@ +class CreateReversedKeywords < ActiveRecord::Migration[5.2] + def change + create_table :reversed_keywords do |t| + t.string :identifier, comment: '保留关键字' + t.text :description, comment: '描述' + t.boolean :closed, default: false, comment: '是否关闭' + + t.timestamps + end + end +end diff --git a/spec/models/reversed_keyword_spec.rb b/spec/models/reversed_keyword_spec.rb new file mode 100644 index 000000000..6b71faeb9 --- /dev/null +++ b/spec/models/reversed_keyword_spec.rb @@ -0,0 +1,5 @@ +require 'rails_helper' + +RSpec.describe ReversedKeyword, type: :model do + pending "add some examples to (or delete) #{__FILE__}" +end