Improved error handling for FollowRemoteService
This commit is contained in:
		
							parent
							
								
									8c0b19012b
								
							
						
					
					
						commit
						0e9c1a297a
					
				| @ -1,8 +1,9 @@ | ||||
| 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 | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user