144 lines
3.6 KiB
Ruby
144 lines
3.6 KiB
Ruby
class PagesController < ApplicationController
|
|
# No authorization required for entirely public controller
|
|
before_action :set_cache_control_headers, only: %i[show badge bounty faq robots]
|
|
|
|
def show
|
|
params[:slug] = combined_fragmented_slug if params[:slug_0].present?
|
|
@page = Page.find_by!(slug: params[:slug])
|
|
not_found_conditions
|
|
set_surrogate_key_header "show-page-#{params[:slug]}"
|
|
|
|
case @page.template
|
|
when "txt"
|
|
render plain: @page.processed_html, content_type: "text/plain"
|
|
when "json"
|
|
render json: @page.body_json
|
|
when "css"
|
|
render plain: @page.body_css, content_type: "text/css"
|
|
end
|
|
end
|
|
|
|
def about
|
|
@page = Page.find_by(slug: "about")
|
|
render :show if @page
|
|
set_surrogate_key_header "about_page"
|
|
end
|
|
|
|
def about_listings
|
|
@page = Page.find_by(slug: "about-listings")
|
|
render :show if @page
|
|
set_surrogate_key_header "about_listings_page"
|
|
end
|
|
|
|
def badge
|
|
render layout: false
|
|
set_surrogate_key_header "badge_page"
|
|
end
|
|
|
|
def bounty
|
|
@page = Page.find_by(slug: "security")
|
|
render :show if @page
|
|
set_surrogate_key_header "bounty_page"
|
|
end
|
|
|
|
def code_of_conduct
|
|
@page = Page.find_by(slug: "code-of-conduct")
|
|
render :show if @page
|
|
set_surrogate_key_header "code_of_conduct_page"
|
|
end
|
|
|
|
def community_moderation
|
|
@page = Page.find_by(slug: "community-moderation")
|
|
render :show if @page
|
|
set_surrogate_key_header "community_moderation_page"
|
|
end
|
|
|
|
def contact
|
|
@page = Page.find_by(slug: "contact")
|
|
render :show if @page
|
|
set_surrogate_key_header "contact"
|
|
end
|
|
|
|
def faq
|
|
@page = Page.find_by(slug: "faq")
|
|
render :show if @page
|
|
set_surrogate_key_header "faq_page"
|
|
end
|
|
|
|
def post_a_job
|
|
@page = Page.find_by(slug: "post-a-job")
|
|
render :show if @page
|
|
set_surrogate_key_header "post_a_job_page"
|
|
end
|
|
|
|
def privacy
|
|
@page = Page.find_by(slug: "privacy")
|
|
render :show if @page
|
|
set_surrogate_key_header "privacy_page"
|
|
end
|
|
|
|
def tag_moderation
|
|
@page = Page.find_by(slug: "tag-moderation")
|
|
render :show if @page
|
|
set_surrogate_key_header "tag_moderation_page"
|
|
end
|
|
|
|
def terms
|
|
@page = Page.find_by(slug: "terms")
|
|
render :show if @page
|
|
set_surrogate_key_header "terms_page"
|
|
end
|
|
|
|
def report_abuse
|
|
billboard_url = admin_billboard_path(params[:billboard]) if params[:billboard].present?
|
|
reported_url = params[:reported_url] || params[:url] || request.referer.presence
|
|
@feedback_message = FeedbackMessage.new(
|
|
reported_url: billboard_url || reported_url&.chomp("?i=i"),
|
|
)
|
|
render "pages/report_abuse"
|
|
end
|
|
|
|
def robots
|
|
# dynamically-generated static page
|
|
respond_to :text
|
|
set_surrogate_key_header "robots_page"
|
|
end
|
|
|
|
def welcome
|
|
redirect_daily_thread_request(Article.admin_published_with("welcome").first)
|
|
end
|
|
|
|
def challenge
|
|
redirect_daily_thread_request(Article.admin_published_with("challenge").first)
|
|
end
|
|
|
|
def checkin
|
|
daily_thread =
|
|
Article
|
|
.published
|
|
.where(user: User.find_by(username: "codenewbiestaff"))
|
|
.order("articles.published_at" => :desc)
|
|
.first
|
|
|
|
redirect_daily_thread_request(daily_thread)
|
|
end
|
|
|
|
private
|
|
|
|
def redirect_daily_thread_request(daily_thread)
|
|
if daily_thread
|
|
redirect_to(Addressable::URI.parse(daily_thread.path).path)
|
|
else
|
|
redirect_to(notifications_path)
|
|
end
|
|
end
|
|
|
|
def not_found_conditions
|
|
not_found unless FeatureFlag.accessible?(@page.feature_flag_name, current_user)
|
|
not_found if params[:format] == "txt" && @page.template != "txt"
|
|
end
|
|
|
|
def combined_fragmented_slug
|
|
(0..5).filter_map { |i| params["slug_#{i}"] }.join("/")
|
|
end
|
|
end
|