From 696de8ea50ec43e06a39de55466f6454319e4ed1 Mon Sep 17 00:00:00 2001 From: Hongbo Wu Date: Fri, 22 Dec 2023 08:08:15 +0800 Subject: [PATCH] check both user provided url and parsed feed url when looking for existing subscription --- .../api/src/resolvers/subscriptions/index.ts | 24 ++++++++++--------- 1 file changed, 13 insertions(+), 11 deletions(-) diff --git a/packages/api/src/resolvers/subscriptions/index.ts b/packages/api/src/resolvers/subscriptions/index.ts index 120dedc95..98dd23e3f 100644 --- a/packages/api/src/resolvers/subscriptions/index.ts +++ b/packages/api/src/resolvers/subscriptions/index.ts @@ -193,9 +193,18 @@ export const subscribeResolver = authorized< }, }) + // validate rss feed + const feed = await parseFeed(input.url) + if (!feed) { + return { + errorCodes: [SubscribeErrorCode.NotFound], + } + } + const feedUrl = feed.url + // find existing subscription const existingSubscription = await getRepository(Subscription).findOneBy({ - url: input.url, + url: feedUrl, user: { id: uid }, type: SubscriptionType.Rss, }) @@ -218,7 +227,7 @@ export const subscribeResolver = authorized< // create a cloud task to fetch rss feed item for resub subscription await enqueueRssFeedFetch({ userIds: [uid], - url: input.url, + url: feedUrl, subscriptionIds: [updatedSubscription.id], scheduledDates: [new Date()], // fetch immediately fetchedDates: [updatedSubscription.lastFetchedAt || null], @@ -234,13 +243,6 @@ export const subscribeResolver = authorized< // create new rss subscription const MAX_RSS_SUBSCRIPTIONS = env.subscription.feed.max - // validate rss feed - const feed = await parseFeed(input.url) - if (!feed) { - return { - errorCodes: [SubscribeErrorCode.NotFound], - } - } // limit number of rss subscriptions to max const results = (await getRepository(Subscription).query( @@ -251,7 +253,7 @@ export const subscribeResolver = authorized< returning *;`, [ feed.title, - feed.url, + feedUrl, feed.description, SubscriptionType.Rss, uid, @@ -275,7 +277,7 @@ export const subscribeResolver = authorized< // create a cloud task to fetch rss feed item for the new subscription await enqueueRssFeedFetch({ userIds: [uid], - url: feed.url, + url: feedUrl, subscriptionIds: [newSubscription.id], scheduledDates: [new Date()], // fetch immediately fetchedDates: [null],