home_controller.rb 2.06 KB
Newer Older
Rob Colbert's avatar
Rob Colbert committed
1 2 3 4 5 6
# frozen_string_literal: true

class HomeController < ApplicationController
  before_action :authenticate_user!
  before_action :set_referrer_policy_header
  before_action :set_initial_state_json
7
  before_action :set_data_for_meta
Rob Colbert's avatar
Rob Colbert committed
8 9 10 11 12 13 14

  def index
    @body_classes = 'app-body'
  end

  private

15
  def set_data_for_meta
16 17
    return if find_route_matches

18
    if params[:username].present?
19
      @account = Account.find_local(params[:username])
20
    elsif params[:account_username].present?
21
      @account = Account.find_local(params[:account_username])
22

23
      if params[:id].present? && !@account.nil?
24 25 26 27 28 29 30
        @status = @account.statuses.find(params[:id])
        @stream_entry = @status.stream_entry
        @type = @stream_entry.activity_type.downcase
      end
    end

    if request.path.starts_with?('/tags') && params[:tag].present?
31
      @tag = Tag.find_normalized(params[:tag])
32 33 34 35
    end

  end

Rob Colbert's avatar
Rob Colbert committed
36 37 38 39
  def authenticate_user!
    return if user_signed_in?

    # if no current user, dont allow to navigate to these paths
40
    if find_route_matches
Rob Colbert's avatar
Rob Colbert committed
41 42 43 44
      redirect_to(homepage_path)
    end
  end

45 46 47 48
  def find_route_matches
    request.path.match(/\A\/(home|groups|lists|notifications|explore|follow_requests|blocks|domain_blocks|mutes)/)
  end

Rob Colbert's avatar
Rob Colbert committed
49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73
  def set_initial_state_json
    serializable_resource = ActiveModelSerializers::SerializableResource.new(InitialStatePresenter.new(initial_state_params), serializer: InitialStateSerializer)
    @initial_state_json   = serializable_resource.to_json
  end

  def initial_state_params
    if !current_user.nil?
      {
        settings: Web::Setting.find_by(user: current_user)&.data || {},
        push_subscription: current_account.user.web_push_subscription(current_session),
        current_account: current_account,
        token: current_session.token,
        admin: Account.find_local(Setting.site_contact_username.strip.gsub(/\A@/, '')),
      }
    else
      {
        admin: Account.find_local(Setting.site_contact_username.strip.gsub(/\A@/, '')),
      }
    end
  end

  def set_referrer_policy_header
    response.headers['Referrer-Policy'] = 'origin'
  end
end