Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
13 changes: 12 additions & 1 deletion app/web/api/v1/create_feed.rb
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ module Api
module V1
##
# Creates stable feed records from authenticated API requests.
module CreateFeed # rubocop:disable Metrics/ModuleLength
module CreateFeed
FEED_ATTRIBUTE_KEYS =
%i[id name url feed_token public_url json_public_url created_at updated_at].freeze
FEED_METADATA_KEYS =
Expand Down Expand Up @@ -41,24 +41,33 @@ def call(request)

private

# @param request [Rack::Request]
# @return [Hash]
def require_account(request)
account = Auth.authenticate(request)
raise Html2rss::Web::UnauthorizedError, 'Authentication required' unless account

account
end

# @param request [Rack::Request]
# @param account [Hash]
# @return [Html2rss::Web::Api::V1::FeedMetadata::CreateParams]
def build_create_params(request, account)
url = validated_url(request_params(request)['url'], account)
FeedMetadata::CreateParams.new(url:, name: FeedMetadata.site_title_for(url))
end

# @param request [Rack::Request]
# @return [Hash]
def request_params(request)
return request.params unless json_request?(request)

request.GET.merge(parsed_json_body(request))
end

# @param request [Rack::Request]
# @return [Hash]
def parsed_json_body(request)
raw_body = request.body.read
request.body.rewind
Expand All @@ -72,6 +81,8 @@ def parsed_json_body(request)
raise Html2rss::Web::BadRequestError, 'Invalid JSON payload'
end

# @param request [Rack::Request]
# @return [Boolean]
def json_request?(request)
request.env['CONTENT_TYPE'].to_s.include?('application/json')
end
Expand Down
2 changes: 0 additions & 2 deletions app/web/routes/api_v1/feed_routes.rb
Original file line number Diff line number Diff line change
Expand Up @@ -20,8 +20,6 @@ def call(router)
router.post do
JSON.generate(Api::V1::CreateFeed.call(router))
end

raise NotFoundError
end
end
end
Expand Down
Loading