summaryrefslogtreecommitdiff
path: root/app/controllers/posts/sources_controller.rb
blob: d8fdbd146bd64e024dcc9eb6ec89da84f439333b (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
# frozen_string_literal: true
require 'booru/live_feed'

class Posts::SourcesController < ApplicationController
  include RateLimitable

  before_action :filter_banned_users
  before_action :load_post
  before_action :check_auth

  before_action -> { ratelimit 1, 5.seconds, t('booru.errors.metadata_flooding', seconds: 5) }, unless: -> { current_user&.staff? }

  def update
    unless captcha_verified?
      @post.errors[:base] << t('posts.update_metadata.errors.captcha_unverified')
      render partial: 'posts/source', layout: false, locals: { post: @post }
      return
    end

    @post.with_lock do
      @post.source_url = params[:post][:source_url].strip if params[:post][:source_url].present?

      if @post.save
        if @post.previous_changes[:source_url]
          SourceChange.add_to_img(@post, current_user, request)
          Booru::LiveFeed.push_source_change(@post, current_user, @post.previous_changes[:source_url].first, @post.source_url)
          # SourceChangeLogger.log(@post, current_user, @post.previous_changes[:source_url].first)
        end
      else
        raise ActiveRecord::Rollback
      end
    end

    @post.update_index

    render partial: 'posts/source', layout: false, locals: { post: @post }
  end

  private

  def load_post
    @post = Post.find(params[:post_id])
  end

  def check_auth
    authorize! :update_metadata, @post
  end
end