aboutsummaryrefslogtreecommitdiffstats
path: root/lib/private/Support
diff options
context:
space:
mode:
authorJoas Schilling <coding@schilljs.com>2021-10-20 10:29:45 +0200
committerJoas Schilling <coding@schilljs.com>2021-10-23 00:54:50 +0200
commitb578a1e8b56f6b3ecf7dee837af6bd8265f9c0b0 (patch)
treee483d50ca038882c3521782aff6574eb0bda0f31 /lib/private/Support
parent1895a6dc573cdb46cfa1987e25d45781623fdb7d (diff)
downloadnextcloud-server-b578a1e8b56f6b3ecf7dee837af6bd8265f9c0b0.tar.gz
nextcloud-server-b578a1e8b56f6b3ecf7dee837af6bd8265f9c0b0.zip
Fair use of push notifications
We want to keep offering our push notification service for free, but large users overload our infrastructure. For this reason we have to rate-limit the use of push notifications. If you need this feature, consider setting up your own push server or using Nextcloud Enterprise. Signed-off-by: Joas Schilling <coding@schilljs.com>
Diffstat (limited to 'lib/private/Support')
-rw-r--r--lib/private/Support/Subscription/Registry.php23
1 files changed, 10 insertions, 13 deletions
diff --git a/lib/private/Support/Subscription/Registry.php b/lib/private/Support/Subscription/Registry.php
index e64eaac1fa2..1298337acb2 100644
--- a/lib/private/Support/Subscription/Registry.php
+++ b/lib/private/Support/Subscription/Registry.php
@@ -59,21 +59,17 @@ class Registry implements IRegistry {
private $groupManager;
/** @var LoggerInterface */
private $logger;
- /** @var IManager */
- private $notificationManager;
public function __construct(IConfig $config,
IServerContainer $container,
IUserManager $userManager,
IGroupManager $groupManager,
- LoggerInterface $logger,
- IManager $notificationManager) {
+ LoggerInterface $logger) {
$this->config = $config;
$this->container = $container;
$this->userManager = $userManager;
$this->groupManager = $groupManager;
$this->logger = $logger;
- $this->notificationManager = $notificationManager;
}
private function getSubscription(): ?ISubscription {
@@ -158,15 +154,16 @@ class Registry implements IRegistry {
/**
* Indicates if a hard user limit is reached and no new users should be created
*
+ * @param IManager|null $notificationManager
* @since 21.0.0
*/
- public function delegateIsHardUserLimitReached(): bool {
+ public function delegateIsHardUserLimitReached(?IManager $notificationManager = null): bool {
$subscription = $this->getSubscription();
if ($subscription instanceof ISubscription &&
$subscription->hasValidSubscription()) {
$userLimitReached = $subscription->isHardUserLimitReached();
- if ($userLimitReached) {
- $this->notifyAboutReachedUserLimit();
+ if ($userLimitReached && $notificationManager instanceof IManager) {
+ $this->notifyAboutReachedUserLimit($notificationManager);
}
return $userLimitReached;
}
@@ -181,8 +178,8 @@ class Registry implements IRegistry {
$hardUserLimit = $this->config->getSystemValue('one-click-instance.user-limit', 50);
$userLimitReached = $userCount >= $hardUserLimit;
- if ($userLimitReached) {
- $this->notifyAboutReachedUserLimit();
+ if ($userLimitReached && $notificationManager instanceof IManager) {
+ $this->notifyAboutReachedUserLimit($notificationManager);
}
return $userLimitReached;
}
@@ -216,17 +213,17 @@ class Registry implements IRegistry {
return $userCount;
}
- private function notifyAboutReachedUserLimit() {
+ private function notifyAboutReachedUserLimit(IManager $notificationManager) {
$admins = $this->groupManager->get('admin')->getUsers();
foreach ($admins as $admin) {
- $notification = $this->notificationManager->createNotification();
+ $notification = $notificationManager->createNotification();
$notification->setApp('core')
->setUser($admin->getUID())
->setDateTime(new \DateTime())
->setObject('user_limit_reached', '1')
->setSubject('user_limit_reached');
- $this->notificationManager->notify($notification);
+ $notificationManager->notify($notification);
}
$this->logger->warning('The user limit was reached and the new user was not created', ['app' => 'lib']);