mirror of
https://github.com/Athou/commafeed.git
synced 2026-03-21 21:37:29 +00:00
add setting to limit feeds per user
This commit is contained in:
@@ -60,7 +60,10 @@ app:
|
|||||||
|
|
||||||
# entries to keep per feed, old entries will be deleted, 0 to disable
|
# entries to keep per feed, old entries will be deleted, 0 to disable
|
||||||
maxFeedCapacity: 500
|
maxFeedCapacity: 500
|
||||||
|
|
||||||
|
# limit the number of feeds a user can subscribe to, 0 to disable
|
||||||
|
maxFeedsPerUser: 0
|
||||||
|
|
||||||
# cache service to use, possible values are 'noop' and 'redis'
|
# cache service to use, possible values are 'noop' and 'redis'
|
||||||
cache: noop
|
cache: noop
|
||||||
|
|
||||||
|
|||||||
@@ -61,7 +61,10 @@ app:
|
|||||||
|
|
||||||
# entries to keep per feed, old entries will be deleted, 0 to disable
|
# entries to keep per feed, old entries will be deleted, 0 to disable
|
||||||
maxFeedCapacity: 500
|
maxFeedCapacity: 500
|
||||||
|
|
||||||
|
# limit the number of feeds a user can subscribe to, 0 to disable
|
||||||
|
maxFeedsPerUser: 0
|
||||||
|
|
||||||
# cache service to use, possible values are 'noop' and 'redis'
|
# cache service to use, possible values are 'noop' and 'redis'
|
||||||
cache: noop
|
cache: noop
|
||||||
|
|
||||||
|
|||||||
@@ -124,6 +124,10 @@ public class CommaFeedConfiguration extends Configuration {
|
|||||||
@Valid
|
@Valid
|
||||||
private Integer maxFeedCapacity;
|
private Integer maxFeedCapacity;
|
||||||
|
|
||||||
|
@NotNull
|
||||||
|
@Valid
|
||||||
|
private Integer maxFeedsPerUser;
|
||||||
|
|
||||||
@NotNull
|
@NotNull
|
||||||
@Min(0)
|
@Min(0)
|
||||||
@Valid
|
@Valid
|
||||||
|
|||||||
@@ -59,6 +59,10 @@ public class FeedSubscriptionDAO extends GenericDAO<FeedSubscription> {
|
|||||||
return initRelations(subs);
|
return initRelations(subs);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public Long count(User user) {
|
||||||
|
return query().select(sub.count()).from(sub).where(sub.user.eq(user)).fetchOne();
|
||||||
|
}
|
||||||
|
|
||||||
public List<FeedSubscription> findByCategory(User user, FeedCategory category) {
|
public List<FeedSubscription> findByCategory(User user, FeedCategory category) {
|
||||||
JPQLQuery<FeedSubscription> query = query().selectFrom(sub).where(sub.user.eq(user));
|
JPQLQuery<FeedSubscription> query = query().selectFrom(sub).where(sub.user.eq(user));
|
||||||
if (category == null) {
|
if (category == null) {
|
||||||
|
|||||||
@@ -15,7 +15,6 @@ import com.commafeed.backend.feed.FeedUtils;
|
|||||||
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.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.FeedException;
|
||||||
@@ -78,8 +77,6 @@ public class OPMLImporter {
|
|||||||
// make sure we continue with the import process even if a feed failed
|
// make sure we continue with the import process even if a feed failed
|
||||||
try {
|
try {
|
||||||
feedSubscriptionService.subscribe(user, outline.getXmlUrl(), name, parent, position);
|
feedSubscriptionService.subscribe(user, outline.getXmlUrl(), name, parent, position);
|
||||||
} catch (FeedSubscriptionException e) {
|
|
||||||
throw e;
|
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
log.error("error while importing {}: {}", outline.getXmlUrl(), e.getMessage());
|
log.error("error while importing {}: {}", outline.getXmlUrl(), e.getMessage());
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -57,6 +57,13 @@ public class FeedSubscriptionService {
|
|||||||
throw new FeedSubscriptionException("Could not subscribe to a feed from this CommaFeed instance");
|
throw new FeedSubscriptionException("Could not subscribe to a feed from this CommaFeed instance");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Integer maxFeedsPerUser = config.getApplicationSettings().getMaxFeedsPerUser();
|
||||||
|
if (maxFeedsPerUser > 0 && feedSubscriptionDAO.count(user) >= maxFeedsPerUser) {
|
||||||
|
String message = String.format("You cannot subscribe to more feeds on this CommaFeed instance (max %s feeds per user)",
|
||||||
|
maxFeedsPerUser);
|
||||||
|
throw new FeedSubscriptionException(message);
|
||||||
|
}
|
||||||
|
|
||||||
Feed feed = feedService.findOrCreate(url);
|
Feed feed = feedService.findOrCreate(url);
|
||||||
|
|
||||||
// upgrade feed to https if it was using http
|
// upgrade feed to https if it was using http
|
||||||
|
|||||||
@@ -60,6 +60,9 @@ app:
|
|||||||
|
|
||||||
# entries to keep per feed, old entries will be deleted, 0 to disable
|
# entries to keep per feed, old entries will be deleted, 0 to disable
|
||||||
maxFeedCapacity: 500
|
maxFeedCapacity: 500
|
||||||
|
|
||||||
|
# limit the number of feeds a user can subscribe to, 0 to disable
|
||||||
|
maxFeedsPerUser: 0
|
||||||
|
|
||||||
# cache service to use, possible values are 'noop' and 'redis'
|
# cache service to use, possible values are 'noop' and 'redis'
|
||||||
cache: noop
|
cache: noop
|
||||||
@@ -69,7 +72,7 @@ app:
|
|||||||
|
|
||||||
# user-agent string that will be used by the http client, leave empty for the default one
|
# user-agent string that will be used by the http client, leave empty for the default one
|
||||||
userAgent:
|
userAgent:
|
||||||
|
|
||||||
# Database connection
|
# Database connection
|
||||||
# -------------------
|
# -------------------
|
||||||
# for MySQL
|
# for MySQL
|
||||||
@@ -92,8 +95,8 @@ database:
|
|||||||
properties:
|
properties:
|
||||||
charSet: UTF-8
|
charSet: UTF-8
|
||||||
validationQuery: "/* CommaFeed Health Check */ SELECT 1"
|
validationQuery: "/* CommaFeed Health Check */ SELECT 1"
|
||||||
|
|
||||||
|
|
||||||
logging:
|
logging:
|
||||||
level: INFO
|
level: INFO
|
||||||
loggers:
|
loggers:
|
||||||
|
|||||||
Reference in New Issue
Block a user