Skip to content
Snippets Groups Projects
Commit 0e9c1a29 authored by Eugen Rochko's avatar Eugen Rochko
Browse files

Improved error handling for FollowRemoteService

parent 8c0b1901
No related branches found
No related tags found
No related merge requests found
import { TIMELINE_SET, TIMELINE_UPDATE, TIMELINE_DELETE } from '../actions/timelines';
import { REBLOG_SUCCESS, FAVOURITE_SUCCESS } from '../actions/interactions';
import { ACCOUNT_SET_SELF, ACCOUNT_FETCH_SUCCESS } from '../actions/accounts';
import { STATUS_FETCH_SUCCESS } from '../actions/statuses';
import Immutable from 'immutable';
import { TIMELINE_SET, TIMELINE_UPDATE, TIMELINE_DELETE } from '../actions/timelines';
import { REBLOG_SUCCESS, FAVOURITE_SUCCESS } from '../actions/interactions';
import { ACCOUNT_SET_SELF, ACCOUNT_FETCH_SUCCESS, ACCOUNT_FOLLOW_SUCCESS, ACCOUNT_UNFOLLOW_SUCCESS } from '../actions/accounts';
import { STATUS_FETCH_SUCCESS } from '../actions/statuses';
import { FOLLOW_SUBMIT_SUCCESS } from '../actions/follow';
import Immutable from 'immutable';
const initialState = Immutable.Map({
home: Immutable.List([]),
......@@ -97,6 +98,9 @@ export default function timelines(state = initialState, action) {
map.set('me', action.account.id);
});
case ACCOUNT_FETCH_SUCCESS:
case FOLLOW_SUBMIT_SUCCESS:
case ACCOUNT_FOLLOW_SUCCESS:
case ACCOUNT_UNFOLLOW_SUCCESS:
return accountToMaps(state, Immutable.fromJS(action.account));
case STATUS_FETCH_SUCCESS:
return contextToMaps(state, Immutable.fromJS(action.status), Immutable.fromJS(action.context.ancestors), Immutable.fromJS(action.context.descendants));
......
......@@ -10,6 +10,14 @@ class ApiController < ApplicationController
render json: { error: 'Record not found' }, status: 404
end
rescue_from Goldfinger::Error do
render json: { error: 'Remote account could not be resolved' }, status: 422
end
rescue_from HTTP::Error do
render json: { error: 'Remote data could not be fetched' }, status: 503
end
protected
def current_resource_owner
......
......@@ -31,9 +31,12 @@ class FollowRemoteAccountService < BaseService
feed = get_feed(account.remote_url)
hubs = feed.xpath('//xmlns:link[@rel="hub"]')
if hubs.empty? || hubs.first.attribute('href').nil? || feed.at_xpath('/xmlns:feed/xmlns:author/xmlns:uri').nil?
Rails.logger.debug "Cannot find PuSH hub or author for #{uri}"
return nil
if hubs.empty? || hubs.first.attribute('href').nil?
raise Goldfinger::Error, "No PubSubHubbub hubs found"
end
if feed.at_xpath('/xmlns:feed/xmlns:author/xmlns:uri').nil?
raise Goldfinger::Error, "No author URI found"
end
account.uri = feed.at_xpath('/xmlns:feed/xmlns:author/xmlns:uri').content
......@@ -53,9 +56,6 @@ class FollowRemoteAccountService < BaseService
end
return account
rescue Goldfinger::Error, HTTP::Error
Rails.logger.debug "Error while fetching data for #{uri}"
nil
end
private
......@@ -89,3 +89,9 @@ class FollowRemoteAccountService < BaseService
HTTP
end
end
class NoAuthorFeedError < StandardError
end
class NoHubError < StandardError
end
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment