discourse/app/controllers/excerpt_controller.rb

41 lines
1.3 KiB
Ruby

require_dependency 'post_excerpt_serializer'
class ExcerptController < ApplicationController
def show
requires_parameter(:url)
uri = URI.parse(params[:url])
route = Rails.application.routes.recognize_path(uri.path)
case route[:controller]
when 'topics'
# If we have a post number, retrieve the last post. Otherwise, first post.
topic_posts = Post.where(topic_id: route[:topic_id].to_i).order(:post_number)
post = route.has_key?(:post_number) ? topic_posts.last : topic_posts.first
guardian.ensure_can_see!(post)
render json: post, serializer: PostExcerptSerializer, root: false
when 'users'
user = User.where(username_lower: route[:username].downcase).first
guardian.ensure_can_see!(user)
render json: user, serializer: UserExcerptSerializer, root: false
when 'list'
if route[:action] == 'category'
category = Category.where(slug: route[:category]).first
guardian.ensure_can_see!(category)
render json: category, serializer: CategoryExcerptSerializer, root: false
end
else
render nothing: true, status: 404
end
rescue ActionController::RoutingError, Discourse::NotFound
render nothing: true, status: 404
end
end