diff --git a/lib/FederatedItems/CircleConfig.php b/lib/FederatedItems/CircleConfig.php index f850e1d3a..8287bd206 100644 --- a/lib/FederatedItems/CircleConfig.php +++ b/lib/FederatedItems/CircleConfig.php @@ -40,6 +40,7 @@ use OCA\Circles\Model\Circle; use OCA\Circles\Model\Federated\FederatedEvent; use OCA\Circles\Model\Helpers\MemberHelper; +use OCA\Circles\Service\ConfigService; /** * Class CircleConfig @@ -55,14 +56,19 @@ class CircleConfig implements /** @var CircleRequest */ private $circleRequest; + /** @var ConfigService */ + private $configService; + /** * CircleConfig constructor. * * @param CircleRequest $circleRequest + * @param ConfigService $configService */ - public function __construct(CircleRequest $circleRequest) { + public function __construct(CircleRequest $circleRequest, ConfigService $configService) { $this->circleRequest = $circleRequest; + $this->configService = $configService; } @@ -133,10 +139,11 @@ public function verify(FederatedEvent $event): void { throw new FederatedItemBadRequestException('Configuration value is not valid'); } - $event->getData()->sInt('config', $config); - $new = clone $circle; $new->setConfig($config); + $this->configService->confirmAllowedCircleTypes($new); + + $event->getData()->sInt('config', $new->getConfig()); $event->setOutcome($this->serialize($new)); } diff --git a/lib/Service/CircleService.php b/lib/Service/CircleService.php index 90a5b317c..45a60c385 100644 --- a/lib/Service/CircleService.php +++ b/lib/Service/CircleService.php @@ -190,6 +190,7 @@ public function create( } $this->confirmName($circle); + $this->configService->confirmAllowedCircleTypes($circle); $member = new Member(); $member->importFromIFederatedUser($owner); diff --git a/lib/Service/ConfigService.php b/lib/Service/ConfigService.php index 05626f5cb..0ff4e8dac 100644 --- a/lib/Service/ConfigService.php +++ b/lib/Service/ConfigService.php @@ -105,7 +105,8 @@ class ConfigService { public const MEMBERS_LIMIT = 'members_limit'; public const ACTIVITY_ON_NEW_CIRCLE = 'creation_activity'; public const ALLOWED_TYPES = 'allowed_types'; - + public const CIRCLE_TYPES_FORCE = 'circle_types_force'; + public const CIRCLE_TYPES_BLOCK = 'circle_types_block'; public const MIGRATION_BYPASS = 'migration_bypass'; public const MIGRATION_22 = 'migration_22'; public const MIGRATION_22_1 = 'migration_22_1'; @@ -180,6 +181,8 @@ class ConfigService { self::MEMBERS_LIMIT => '-1', self::ACTIVITY_ON_NEW_CIRCLE => '1', self::ALLOWED_TYPES => Member::ALLOWING_ALL_TYPES, + self::CIRCLE_TYPES_FORCE => '0', + self::CIRCLE_TYPES_BLOCK => '0', self::MIGRATION_BYPASS => '0', self::MIGRATION_22 => '0', @@ -745,4 +748,19 @@ public function linkToRoute(string $route, array $args): string { return $path; } + + + /** + * Enforce or Block circle's config/type + * + * @param Circle $circle + */ + public function confirmAllowedCircleTypes(Circle $circle): void { + $config = $circle->getConfig(); + $config |= $this->getAppValueInt(ConfigService::CIRCLE_TYPES_FORCE); + $block = $this->getAppValueInt(ConfigService::CIRCLE_TYPES_BLOCK); + $config |= $block; + $config -= $block; + $circle->setConfig($config); + } }