Обновление клиента
This commit is contained in:
@@ -0,0 +1,273 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
/**
|
||||
* SPDX-FileCopyrightText: 2019 Nextcloud GmbH and Nextcloud contributors
|
||||
* SPDX-License-Identifier: AGPL-3.0-or-later
|
||||
*/
|
||||
|
||||
namespace OCA\Support\Subscription;
|
||||
|
||||
use OCA\Support\Service\SubscriptionService;
|
||||
use OCP\AppFramework\Services\IAppConfig;
|
||||
use OCP\AppFramework\Utility\ITimeFactory;
|
||||
use OCP\IConfig;
|
||||
use OCP\ServerVersion;
|
||||
use OCP\Support\Subscription\ISubscription;
|
||||
use OCP\Support\Subscription\ISupportedApps;
|
||||
|
||||
class SubscriptionAdapter implements ISubscription, ISupportedApps {
|
||||
public function __construct(
|
||||
private readonly SubscriptionService $subscriptionService,
|
||||
private readonly IConfig $config,
|
||||
private readonly IAppConfig $appConfig,
|
||||
private readonly ITimeFactory $timeFactory,
|
||||
private readonly ServerVersion $serverVersion,
|
||||
) {
|
||||
}
|
||||
|
||||
/**
|
||||
* Indicates if a valid subscription is available
|
||||
*/
|
||||
#[\Override]
|
||||
public function hasValidSubscription(): bool {
|
||||
try {
|
||||
$endDate = $this->appConfig->getAppValueString('end_date');
|
||||
} catch (\Throwable) {
|
||||
return false;
|
||||
}
|
||||
|
||||
return $this->subscriptionNotExpired($endDate);
|
||||
}
|
||||
|
||||
private function subscriptionNotExpired(string $endDate): bool {
|
||||
if ($endDate === '' || $endDate === 'now') {
|
||||
return false;
|
||||
}
|
||||
|
||||
$subscriptionEndDate = $this->timeFactory->getDateTime($endDate);
|
||||
$now = $this->timeFactory->getDateTime();
|
||||
return $now < $subscriptionEndDate;
|
||||
}
|
||||
|
||||
/**
|
||||
* Fetches the list of app IDs that are supported by the subscription
|
||||
*
|
||||
* @since 17.0.0
|
||||
*/
|
||||
#[\Override]
|
||||
public function getSupportedApps(): array {
|
||||
[
|
||||
$instanceSize,
|
||||
$hasSubscription,
|
||||
$isInvalidSubscription,
|
||||
$isOverLimit,
|
||||
$subscriptionInfo
|
||||
] = $this->subscriptionService->getSubscriptionInfo();
|
||||
$hasValidGroupwareSubscription = $this->subscriptionNotExpired($subscriptionInfo['groupware']['endDate'] ?? 'now');
|
||||
$hasValidTalkSubscription = $this->subscriptionNotExpired($subscriptionInfo['talk']['endDate'] ?? 'now');
|
||||
$hasValidCollaboraSubscription = $this->subscriptionNotExpired($subscriptionInfo['collabora']['endDate'] ?? 'now');
|
||||
$hasValidOnlyOfficeSubscription = $this->subscriptionNotExpired($subscriptionInfo['onlyoffice']['endDate'] ?? 'now');
|
||||
|
||||
$filesSubscription = [
|
||||
'activity',
|
||||
'admin_audit',
|
||||
'bruteforcesettings',
|
||||
'circles',
|
||||
'cloud_federation_api',
|
||||
'comments',
|
||||
'data_request',
|
||||
'dav',
|
||||
'encryption',
|
||||
'external',
|
||||
'federatedfilesharing',
|
||||
'federation',
|
||||
'files',
|
||||
'files_accesscontrol',
|
||||
'files_antivirus',
|
||||
'files_automatedtagging',
|
||||
'files_external',
|
||||
'files_fulltextsearch',
|
||||
'files_fulltextsearch_tesseract',
|
||||
'files_pdfviewer',
|
||||
'files_retention',
|
||||
'files_sharing',
|
||||
'files_trashbin',
|
||||
'files_versions',
|
||||
'firstrunwizard',
|
||||
'fulltextsearch',
|
||||
'fulltextsearch_elasticsearch',
|
||||
'groupfolders',
|
||||
'guests',
|
||||
'logreader',
|
||||
'lookup_server_connector',
|
||||
'nextcloud_announcements',
|
||||
'notifications',
|
||||
'oauth2',
|
||||
'password_policy',
|
||||
'photos',
|
||||
'privacy',
|
||||
'provisioning_api',
|
||||
'recommendations',
|
||||
'serverinfo',
|
||||
'settings',
|
||||
'sharebymail',
|
||||
'sharepoint',
|
||||
'socialsharing_diaspora',
|
||||
'socialsharing_email',
|
||||
'socialsharing_facebook',
|
||||
'socialsharing_twitter',
|
||||
'support',
|
||||
'survey_client',
|
||||
'suspicious_login',
|
||||
'systemtags',
|
||||
'terms_of_service',
|
||||
'text',
|
||||
'theming',
|
||||
'twofactor_backupcodes',
|
||||
'twofactor_totp',
|
||||
'updatenotification',
|
||||
'user_ldap',
|
||||
'user_oidc',
|
||||
'user_saml',
|
||||
'viewer',
|
||||
'workflowengine',
|
||||
'workflow_script',
|
||||
];
|
||||
|
||||
$nextcloudVersion = $this->serverVersion->getMajorVersion();
|
||||
|
||||
if ($nextcloudVersion >= 30) {
|
||||
$filesSubscription[] = 'app_api';
|
||||
$filesSubscription[] = 'twofactor_nextcloud_notification';
|
||||
if (($subscriptionInfo['level'] ?? 'none') === 'ultimate') {
|
||||
$filesSubscription[] = 'webhook_listeners';
|
||||
}
|
||||
}
|
||||
|
||||
if ($nextcloudVersion >= 29) {
|
||||
$filesSubscription[] = 'files_downloadlimit';
|
||||
$filesSubscription[] = 'files_reminders';
|
||||
}
|
||||
|
||||
if ($nextcloudVersion >= 28) {
|
||||
$filesSubscription[] = 'files_reminders';
|
||||
$filesSubscription[] = 'security_guard';
|
||||
} else {
|
||||
// Removed in 28
|
||||
$filesSubscription[] = 'files_rightclick';
|
||||
}
|
||||
|
||||
if ($nextcloudVersion >= 26) {
|
||||
$filesSubscription[] = 'files_confidential';
|
||||
}
|
||||
|
||||
if ($nextcloudVersion >= 25) {
|
||||
$filesSubscription[] = 'related_resources';
|
||||
} else {
|
||||
// Removed in 25
|
||||
$filesSubscription[] = 'files_videoplayer';
|
||||
}
|
||||
|
||||
if ($nextcloudVersion >= 24) {
|
||||
$filesSubscription[] = 'files_lock';
|
||||
}
|
||||
|
||||
if ($nextcloudVersion >= 22) {
|
||||
$filesSubscription[] = 'approval';
|
||||
$filesSubscription[] = 'contacts';
|
||||
$filesSubscription[] = 'files_zip';
|
||||
}
|
||||
|
||||
if ($nextcloudVersion >= 20) {
|
||||
$filesSubscription[] = 'dashboard';
|
||||
$filesSubscription[] = 'flow_notifications';
|
||||
$filesSubscription[] = 'user_status';
|
||||
$filesSubscription[] = 'weather_status';
|
||||
}
|
||||
|
||||
if ($nextcloudVersion >= 19) {
|
||||
$filesSubscription[] = 'contactsinteraction';
|
||||
}
|
||||
|
||||
if ($nextcloudVersion >= 18) {
|
||||
$filesSubscription[] = 'globalsiteselector';
|
||||
}
|
||||
|
||||
$supportedApps = [];
|
||||
|
||||
if ($hasSubscription) {
|
||||
$supportedApps = array_merge($supportedApps, $filesSubscription);
|
||||
}
|
||||
if ($hasValidGroupwareSubscription) {
|
||||
$supportedApps[] = 'calendar';
|
||||
$supportedApps[] = 'contacts';
|
||||
$supportedApps[] = 'deck';
|
||||
$supportedApps[] = 'mail';
|
||||
}
|
||||
if ($hasValidTalkSubscription) {
|
||||
$supportedApps[] = 'spreed';
|
||||
}
|
||||
if ($hasValidCollaboraSubscription) {
|
||||
$supportedApps[] = 'richdocuments';
|
||||
}
|
||||
if ($hasValidOnlyOfficeSubscription) {
|
||||
$supportedApps[] = 'onlyoffice';
|
||||
}
|
||||
|
||||
if (isset($subscriptionInfo['supportedApps'])) {
|
||||
foreach ($subscriptionInfo['supportedApps'] as $app) {
|
||||
if ($app !== '' && !in_array($app, $supportedApps)) {
|
||||
$supportedApps[] = $app;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return $supportedApps;
|
||||
}
|
||||
|
||||
/**
|
||||
* Indicates if the subscription has extended support
|
||||
*
|
||||
* @since 17.0.0
|
||||
*/
|
||||
#[\Override]
|
||||
public function hasExtendedSupport(): bool {
|
||||
try {
|
||||
return $this->appConfig->getAppValueBool('extended_support');
|
||||
} catch (\Throwable) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Indicates if a hard user limit is reached and no new users should be created
|
||||
*
|
||||
* @since 21.0.0
|
||||
*/
|
||||
#[\Override]
|
||||
public function isHardUserLimitReached(): bool {
|
||||
[
|
||||
,,
|
||||
$isInvalidSubscription,
|
||||
$isOverLimit,
|
||||
$subscriptionInfo
|
||||
] = $this->subscriptionService->getSubscriptionInfo();
|
||||
|
||||
$configUserLimit = (int)$this->config->getAppValue('support', 'user-limit', '0');
|
||||
if (
|
||||
!$isInvalidSubscription
|
||||
&& $configUserLimit > 0
|
||||
&& $configUserLimit <= $this->subscriptionService->getUserCount()
|
||||
) {
|
||||
return true;
|
||||
}
|
||||
|
||||
if (!isset($subscriptionInfo['hasHardUserLimit']) || $subscriptionInfo['hasHardUserLimit'] === false) {
|
||||
return false;
|
||||
}
|
||||
|
||||
return $isOverLimit;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user