commit: 2f4c5f504fa5edc2a826afa9645371f529ae904d
parent: f08e6e9ab54a72cc20b33b270789c245b5cfde39
Author: Eugen Rochko <eugen@zeonfederated.com>
Date: Sat, 9 Dec 2017 01:32:29 +0100
Limit users to 50 lists, remove pagination from lists API (#5933)
Diffstat:
4 files changed, 15 insertions(+), 42 deletions(-)
diff --git a/app/controllers/api/v1/lists_controller.rb b/app/controllers/api/v1/lists_controller.rb
@@ -1,18 +1,14 @@
# frozen_string_literal: true
class Api::V1::ListsController < Api::BaseController
- LISTS_LIMIT = 50
-
before_action -> { doorkeeper_authorize! :read }, only: [:index, :show]
before_action -> { doorkeeper_authorize! :write }, except: [:index, :show]
before_action :require_user!
before_action :set_list, except: [:index, :create]
- after_action :insert_pagination_headers, only: :index
-
def index
- @lists = List.where(account: current_account).paginate_by_max_id(limit_param(LISTS_LIMIT), params[:max_id], params[:since_id])
+ @lists = List.where(account: current_account).all
render json: @lists, each_serializer: REST::ListSerializer
end
@@ -44,36 +40,4 @@ class Api::V1::ListsController < Api::BaseController
def list_params
params.permit(:title)
end
-
- def insert_pagination_headers
- set_pagination_headers(next_path, prev_path)
- end
-
- def next_path
- if records_continue?
- api_v1_lists_url pagination_params(max_id: pagination_max_id)
- end
- end
-
- def prev_path
- unless @lists.empty?
- api_v1_lists_url pagination_params(since_id: pagination_since_id)
- end
- end
-
- def pagination_max_id
- @lists.last.id
- end
-
- def pagination_since_id
- @lists.first.id
- end
-
- def records_continue?
- @lists.size == limit_param(LISTS_LIMIT)
- end
-
- def pagination_params(core_params)
- params.permit(:limit).merge(core_params)
- end
end
diff --git a/app/models/list.rb b/app/models/list.rb
@@ -13,6 +13,8 @@
class List < ApplicationRecord
include Paginable
+ PER_ACCOUNT_LIMIT = 50
+
belongs_to :account
has_many :list_accounts, inverse_of: :list, dependent: :destroy
@@ -20,6 +22,10 @@ class List < ApplicationRecord
validates :title, presence: true
+ validates_each :account_id, on: :create do |record, _attr, value|
+ record.errors.add(:base, I18n.t('lists.errors.limit')) if List.where(account_id: value).count >= PER_ACCOUNT_LIMIT
+ end
+
before_destroy :clean_feed_manager
private
diff --git a/app/validators/status_pin_validator.rb b/app/validators/status_pin_validator.rb
@@ -2,9 +2,9 @@
class StatusPinValidator < ActiveModel::Validator
def validate(pin)
- pin.errors.add(:status, I18n.t('statuses.pin_errors.reblog')) if pin.status.reblog?
- pin.errors.add(:status, I18n.t('statuses.pin_errors.ownership')) if pin.account_id != pin.status.account_id
- pin.errors.add(:status, I18n.t('statuses.pin_errors.private')) unless %w(public unlisted).include?(pin.status.visibility)
- pin.errors.add(:status, I18n.t('statuses.pin_errors.limit')) if pin.account.status_pins.count > 4
+ pin.errors.add(:base, I18n.t('statuses.pin_errors.reblog')) if pin.status.reblog?
+ pin.errors.add(:base, I18n.t('statuses.pin_errors.ownership')) if pin.account_id != pin.status.account_id
+ pin.errors.add(:base, I18n.t('statuses.pin_errors.private')) unless %w(public unlisted).include?(pin.status.visibility)
+ pin.errors.add(:base, I18n.t('statuses.pin_errors.limit')) if pin.account.status_pins.count > 4
end
end
diff --git a/config/locales/en.yml b/config/locales/en.yml
@@ -458,6 +458,9 @@ en:
title: Invite people
landing_strip_html: "<strong>%{name}</strong> is a user on %{link_to_root_path}. You can follow them or interact with them if you have an account anywhere in the fediverse."
landing_strip_signup_html: If you don't, you can <a href="%{sign_up_path}">sign up here</a>.
+ lists:
+ errors:
+ limit: You have reached the maximum amount of lists
media_attachments:
validations:
images_and_video: Cannot attach a video to a status that already contains images
@@ -591,7 +594,7 @@ en:
open_in_web: Open in web
over_character_limit: character limit of %{max} exceeded
pin_errors:
- limit: Too many toots pinned
+ limit: You have already pinned the maximum number of toots
ownership: Someone else's toot cannot be pinned
private: Non-public toot cannot be pinned
reblog: A boost cannot be pinned