diff --git a/src/main/java/com/commafeed/backend/services/FeedSubscriptionService.java b/src/main/java/com/commafeed/backend/services/FeedSubscriptionService.java index 00ba09ed..566368c2 100644 --- a/src/main/java/com/commafeed/backend/services/FeedSubscriptionService.java +++ b/src/main/java/com/commafeed/backend/services/FeedSubscriptionService.java @@ -3,6 +3,7 @@ package com.commafeed.backend.services; import java.util.List; import javax.ejb.Stateless; +import javax.ejb.ApplicationException; import javax.inject.Inject; import com.commafeed.backend.dao.FeedEntryDAO; @@ -19,6 +20,12 @@ import com.google.api.client.util.Lists; @Stateless public class FeedSubscriptionService { + @ApplicationException + public class FeedSubscriptionException extends RuntimeException { + public FeedSubscriptionException(String msg) { + super(msg); + } + } @Inject FeedService feedService; @@ -41,7 +48,12 @@ public class FeedSubscriptionService { public Feed subscribe(User user, String url, String title, FeedCategory category) { - if (url.startsWith(applicationSettingsService.get().getPublicUrl())) { + final String pubUrl = applicationSettingsService.get().getPublicUrl(); + if (pubUrl == null) { + throw new FeedSubscriptionException( + "Public URL of this CommaFeed is unset"); + } + if (url.startsWith(pubUrl)) { throw new RuntimeException( "Could not subscribe to a feed from this CommaFeed instance"); } diff --git a/src/main/java/com/commafeed/frontend/rest/resources/FeedREST.java b/src/main/java/com/commafeed/frontend/rest/resources/FeedREST.java index 68394500..3b4c9b03 100644 --- a/src/main/java/com/commafeed/frontend/rest/resources/FeedREST.java +++ b/src/main/java/com/commafeed/frontend/rest/resources/FeedREST.java @@ -224,9 +224,15 @@ public class FeedREST extends AbstractResourceREST { FeedCategory category = CategoryREST.ALL.equals(req.getCategoryId()) ? null : feedCategoryDAO.findById(Long.valueOf(req.getCategoryId())); FeedInfo info = (FeedInfo) fetchFeed(url).getEntity(); - feedSubscriptionService.subscribe(getUser(), info.getUrl(), + try { + feedSubscriptionService.subscribe(getUser(), info.getUrl(), req.getTitle(), category); - + } catch (Exception e) { + log.info("Failed to subscribe to URL {}: {}", url, e.getMessage()); + return Response.status(Status.SERVICE_UNAVAILABLE).entity( + "Failed to subscribe to URL " + url + ": " + e.getMessage() + ).build(); + } return Response.ok(Status.OK).build(); } diff --git a/src/main/webapp/js/controllers.js b/src/main/webapp/js/controllers.js index b635265f..fc46eb18 100644 --- a/src/main/webapp/js/controllers.js +++ b/src/main/webapp/js/controllers.js @@ -75,8 +75,11 @@ function($scope, FeedService, CategoryService) { } FeedService.subscribe($scope.sub, function() { CategoryService.init(); + $scope.close(); + }, function(data) { + $scope.state = 'failed'; + $scope.sub.title = 'ERROR: ' + data.data; }); - $scope.close(); }; $scope.openImport = function() {