display error when importing invalid OPML file

This commit is contained in:
Athou
2022-08-13 18:46:08 +02:00
parent 906acb217a
commit 9ec62bc1de
2 changed files with 12 additions and 15 deletions

View File

@@ -18,6 +18,7 @@ import com.commafeed.backend.service.FeedSubscriptionService;
import com.commafeed.backend.service.FeedSubscriptionService.FeedSubscriptionException; import com.commafeed.backend.service.FeedSubscriptionService.FeedSubscriptionException;
import com.rometools.opml.feed.opml.Opml; import com.rometools.opml.feed.opml.Opml;
import com.rometools.opml.feed.opml.Outline; import com.rometools.opml.feed.opml.Outline;
import com.rometools.rome.io.FeedException;
import com.rometools.rome.io.WireFeedInput; import com.rometools.rome.io.WireFeedInput;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
@@ -32,19 +33,14 @@ public class OPMLImporter {
private final FeedSubscriptionService feedSubscriptionService; private final FeedSubscriptionService feedSubscriptionService;
private final CacheService cache; private final CacheService cache;
public void importOpml(User user, String xml) { public void importOpml(User user, String xml) throws IllegalArgumentException, FeedException {
xml = xml.substring(xml.indexOf('<')); xml = xml.substring(xml.indexOf('<'));
WireFeedInput input = new WireFeedInput(); WireFeedInput input = new WireFeedInput();
try { Opml feed = (Opml) input.build(new StringReader(xml));
Opml feed = (Opml) input.build(new StringReader(xml)); List<Outline> outlines = feed.getOutlines();
List<Outline> outlines = feed.getOutlines(); for (int i = 0; i < outlines.size(); i++) {
for (int i = 0; i < outlines.size(); i++) { handleOutline(user, outlines.get(i), null, i);
handleOutline(user, outlines.get(i), null, i);
}
} catch (Exception e) {
log.error(e.getMessage(), e);
} }
} }
private void handleOutline(User user, Outline outline, FeedCategory parent, int position) { private void handleOutline(User user, Outline outline, FeedCategory parent, int position) {

View File

@@ -12,30 +12,31 @@ import com.commafeed.backend.dao.FeedCategoryDAO;
import com.commafeed.backend.model.FeedCategory; import com.commafeed.backend.model.FeedCategory;
import com.commafeed.backend.model.User; import com.commafeed.backend.model.User;
import com.commafeed.backend.service.FeedSubscriptionService; import com.commafeed.backend.service.FeedSubscriptionService;
import com.rometools.rome.io.FeedException;
class OPMLImporterTest { class OPMLImporterTest {
@Test @Test
void testOpmlV10() throws IOException { void testOpmlV10() throws IOException, IllegalArgumentException, FeedException {
testOpmlVersion("/opml/opml_v1.0.xml"); testOpmlVersion("/opml/opml_v1.0.xml");
} }
@Test @Test
void testOpmlV11() throws IOException { void testOpmlV11() throws IOException, IllegalArgumentException, FeedException {
testOpmlVersion("/opml/opml_v1.1.xml"); testOpmlVersion("/opml/opml_v1.1.xml");
} }
@Test @Test
void testOpmlV20() throws IOException { void testOpmlV20() throws IOException, IllegalArgumentException, FeedException {
testOpmlVersion("/opml/opml_v2.0.xml"); testOpmlVersion("/opml/opml_v2.0.xml");
} }
@Test @Test
void testOpmlNoVersion() throws IOException { void testOpmlNoVersion() throws IOException, IllegalArgumentException, FeedException {
testOpmlVersion("/opml/opml_noversion.xml"); testOpmlVersion("/opml/opml_noversion.xml");
} }
private void testOpmlVersion(String fileName) throws IOException { private void testOpmlVersion(String fileName) throws IOException, IllegalArgumentException, FeedException {
FeedCategoryDAO feedCategoryDAO = Mockito.mock(FeedCategoryDAO.class); FeedCategoryDAO feedCategoryDAO = Mockito.mock(FeedCategoryDAO.class);
FeedSubscriptionService feedSubscriptionService = Mockito.mock(FeedSubscriptionService.class); FeedSubscriptionService feedSubscriptionService = Mockito.mock(FeedSubscriptionService.class);
CacheService cacheService = Mockito.mock(CacheService.class); CacheService cacheService = Mockito.mock(CacheService.class);