Skip to content
Extraits de code Groupes Projets
Valider e24bfbde rédigé par Eugen Rochko's avatar Eugen Rochko
Parcourir les fichiers

Fixing FanOutOnWriteService, fixing Sidekiq not having enough DB connections

in the pool, adding a throttle of 60rpm per IP, adding mini profiler, adding
admin status to users
parent 8eeec389
Aucune branche associée trouvée
Aucune étiquette associée trouvée
Aucune requête de fusion associée trouvée
......@@ -58,10 +58,13 @@ group :development do
gem 'rubocop', require: false
gem 'better_errors'
gem 'binding_of_caller'
gem 'rack-mini-profiler'
gem 'letter_opener'
end
group :production do
gem 'rails_12factor'
end
group :development, :production do
gem 'rack-mini-profiler'
end
......@@ -2,4 +2,11 @@ class ApplicationController < ActionController::Base
# Prevent CSRF attacks by raising an exception.
# For APIs, you may want to use :null_session instead.
protect_from_forgery with: :exception
# Profiling
before_action do
if current_user && current_user.admin?
Rack::MiniProfiler.authorize_request
end
end
end
......@@ -6,6 +6,7 @@ class FeedManager
end
def self.filter_status?(status, follower)
replied_to_user = status.reply? ? status.thread.account : nil
(status.reply? && !(follower.id = replied_to_user.id || follower.following?(replied_to_user)))
end
end
......@@ -7,4 +7,8 @@ class User < ActiveRecord::Base
validates :account, presence: true
has_many :oauth_applications, class_name: 'Doorkeeper::Application', as: :owner
def admin?
self.admin
end
end
......@@ -3,7 +3,7 @@ class FanOutOnWriteService < BaseService
# @param [Status] status
def call(status)
deliver_to_self(status) if status.account.local?
deliver_to_followers(status, status.reply? ? status.thread.account : nil)
deliver_to_followers(status)
deliver_to_mentioned(status)
end
......@@ -13,7 +13,7 @@ class FanOutOnWriteService < BaseService
push(:home, status.account.id, status)
end
def deliver_to_followers(status, replied_to_user)
def deliver_to_followers(status)
status.account.followers.each do |follower|
next if !follower.local? || FeedManager.filter_status?(status, follower)
push(:home, follower.id, status)
......
default: &default
adapter: postgresql
pool: 5
pool: 25
timeout: 5000
encoding: unicode
......
class Rack::Attack
# TODO
throttle('req/ip', limit: 300, period: 5.minutes) do |req|
req.ip
end
end
require 'sidekiq/web'
Rails.application.routes.draw do
authenticate :user do
authenticate :user, lambda { |u| u.admin? } do
mount Sidekiq::Web => '/sidekiq'
end
......
class AddAdminToUsers < ActiveRecord::Migration
def change
add_column :users, :admin, :boolean, default: false
end
end
......@@ -11,7 +11,7 @@
#
# It's strongly recommended that you check this file into your version control system.
ActiveRecord::Schema.define(version: 20160322193748) do
ActiveRecord::Schema.define(version: 20160325130944) do
# These are extensions that must be enabled in order to support this database
enable_extension "plpgsql"
......@@ -143,19 +143,20 @@ ActiveRecord::Schema.define(version: 20160322193748) do
add_index "stream_entries", ["activity_id", "activity_type"], name: "index_stream_entries_on_activity_id_and_activity_type", using: :btree
create_table "users", force: :cascade do |t|
t.string "email", default: "", null: false
t.integer "account_id", null: false
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
t.string "encrypted_password", default: "", null: false
t.string "email", default: "", null: false
t.integer "account_id", null: false
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
t.string "encrypted_password", default: "", null: false
t.string "reset_password_token"
t.datetime "reset_password_sent_at"
t.datetime "remember_created_at"
t.integer "sign_in_count", default: 0, null: false
t.integer "sign_in_count", default: 0, null: false
t.datetime "current_sign_in_at"
t.datetime "last_sign_in_at"
t.inet "current_sign_in_ip"
t.inet "last_sign_in_ip"
t.boolean "admin", default: false
end
add_index "users", ["account_id"], name: "index_users_on_account_id", using: :btree
......
0% Chargement en cours ou .
You are about to add 0 people to the discussion. Proceed with caution.
Terminez d'abord l'édition de ce message.
Veuillez vous inscrire ou vous pour commenter